二叉树-公共祖先

原创 2017年01月03日 16:47:36

import java.util.Scanner;

class Node{
	int id;
	Node left;
	Node right;
	Node(int id){
		this.id= id;
		left= null;
		right= null;
	}
}
class Find{
	Node FindNode(Node a, Node b, Node root){
		if(root== null||root== a|| root== b)
			return root;
			
		Node left= FindNode(a, b, root.left);		
		Node right= FindNode(a, b, root.right);
		
		if(left!= null&& right!= null) return root;
		if(left!= null) return left;
		return right;
	}
}
public class Main {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in= new Scanner(System.in);
		
		int n= in.nextInt();
		Find find= new Find();
		while(n!= -1){
			//build tree
			Node[] tree= new Node[n];
			for(int i= 0; i<n; i++)
				tree[i]= new Node(i);
			
			for(int i= 0; i< n; i++){
				int leftId= in.nextInt();
				if(leftId!= -1) tree[i].left= tree[leftId];
				int rightId= in.nextInt();
				if(rightId!= -1) tree[i].right= tree[rightId];
			}
			
			int m= in.nextInt();

			while(m--!= 0){
				System.out.println(find.FindNode(tree[in.nextInt()], tree[in.nextInt()], tree[0]).id);
				
			}
			n= in.nextInt();
		}
	}

}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

二叉树中两个节点的最近公共祖先节点

题目:求二叉树中两个节点的最近公共祖先节点 一、该二叉树为搜索二叉树 搜索二叉树的特点: 任意一个节点的左子树的所有节点值都比该节点的值小,其右子树的所有节点值都比该节点的值大。 解决该问题方法: 从...

树---求给定二叉树中两节点的最低公共祖先(LCA)

一、问题描述对于一颗二叉树,给定其中的两节点n1,n2,求出他们的最低公共祖先(Lowest Common Ancestor )。例如: 二、问题求解利用递归思想。(1)从root开始遍历,如果n1...

二叉树(12)----查找两个节点最低祖先节点(或最近公共父节点等),递归和非递归

1、二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct...

求二叉树的两个节点的最低公共祖先节点

这是一道很经典的问题,《剑指Offer》上给出的解法是先找到从根节点到这两个节点的简单路径,这两条简单路径的最后公共节点就是这两个节点的最低公共祖先节点。本文给出的解法不必找到从根节点到这两个节点的简...

寻找二叉树两个节点的最低公共祖先

原文链接:http://www.geeksforgeeks.org/lowest-common-ancestor-binary-tree-set-1/ ACM之家链接:http://www.acme...

编程算法 - 二叉树的最低公共祖先 代码(C)

二叉树的最低公共祖先 代码(C)本文地址: http://blog.csdn.net/caroline_wendy二叉树的最低公共祖先(lowerest common ancestor), 首先先序遍...

非搜索二叉树的最近公共祖先

今天做了一个在线编程题, 题目是:求一个一般二叉树(非二叉搜索树)的最近公共祖先。 题目要求不能使用额外空间来存储节点。

二叉树最近公共祖先问题(O(n) time 且只遍历一遍,O(1) Space (不考虑函数调用栈的空间))

Tarjan算法很精妙,但是使用了并查集,需要额外O(n)的存储空间。上面博客中给的第三个方法也是需要记录根到节点的路径,需要O(log n)空间,当然考虑到一般情况下我们遍历树都是递归的方式,所以本...

[ACM] sdut 2882 Full Binary Tree (满二叉树的公共祖先)

Full Binary Tree Time Limit: 2000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 In ...

【Codeforces Round 362 (Div 2)C】【STL-map 最近公共祖先思想】Lorenzo Von Matterhorn 数域二叉树的路径权值变更查询

C. Lorenzo Von Matterhorn time limit per test 1 second memory limit per test 256 megabytes inp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)