二叉树-公共祖先

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

}


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

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

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

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

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

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

5-10 顺序存储的二叉树的最近的公共祖先问题   (25分) 设顺序存储的二叉树中有编号为ii和jj的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。 输入格式: 输...

求二叉树的任意两个节点的最近公共祖先

 二叉查找树   如果该二叉树是二叉查找树,那么求解LCA十分简单。 基本思想为:从树根开始,该节点的值为t,如果t大于t1和t2,说明t1和t2都位于t的左侧,所以它们的共同祖先必定在...

面试经典(5)--二叉树最低公共祖先LCA

题目:输入二叉树的俩个节点,求它们的最低公共祖先 算法分析:我们直接来分析O(n)的算法。 比如求节点F和节点H的最低公共祖先,先求出从根节点A到F的路径,再求出A到H的路径,那么最后一个相同的节...

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

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

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

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

Lowest Common Ancestor of a Binary Search Tree(二叉树最小公共祖先)

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BS...

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

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

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

一、问题描述对于一颗二叉树,给定其中的两节点n1,n2,求出他们的最低公共祖先(Lowest Common Ancestor )。例如: 二、问题求解利用递归思想。(1)从root开始遍历,如果n1...
  • will130
  • will130
  • 2015年10月31日 21:37
  • 319
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二叉树-公共祖先
举报原因:
原因补充:

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