【第22期】观点:IT 行业加班,到底有没有价值?

二叉树-公共祖先

原创 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();
		}
	}

}


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

相关文章推荐

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

题目:求二叉树中两个节点的最近公共祖先节点 一、该二叉树为搜索二叉树 搜索二叉树的特点: 任意一个节点的左子树的所有节点值都比该节点的值小,其右子树的所有节点值都比该节点的值大。 ...
  • qfikh
  • qfikh
  • 2016-11-04 14:50
  • 148

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

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

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

pat 顺序存储的二叉树的最近的公共祖先问题

pat 顺序存储的二叉树的最近的公共祖先问题  顺序存储的二叉树的最近的公共祖先问题   (25分) 设顺序存储的二叉树中有编号为ii和jj的两个结点,请设计算法求出它们最近的公共祖先...

求二叉树中两个节点的最小公共祖先(LCA)

题目要求:求二叉树中两个节点p,q的最低公共祖先节点   首先,题目中没有明确说明节点的结构,所以思考了一会然后问面试官节点有没有父指针,面试官说有没有父指针有影响吗?我说有,然后他笑着说你来说说...

二叉树两结点的最低公共祖先结点(一)

题目 二叉树结点的定义如下: struct node { int data; struct node* left; struct node* right; }; ...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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