Java 前序遍历完成公共祖先结点的查找

来源:互联网 发布:淘宝种植箱图片及价格 编辑:程序博客网 时间:2024/06/05 14:16
public class Main {public static void main(String[] args) throws Exception {BinaryTreeNode root = new BinaryTreeNode();BinaryTreeNode n1 = new BinaryTreeNode();BinaryTreeNode n2 = new BinaryTreeNode();BinaryTreeNode n3 = new BinaryTreeNode();BinaryTreeNode n4 = new BinaryTreeNode();BinaryTreeNode n5 = new BinaryTreeNode();root.value = 50;n1.value = 25;n2.value = 75;n3.value = 10;n4.value = 35;n5.value = 35;root.leftNode = n1;root.rightNode = n2;n1.leftNode = n3;n1.rightNode = n4;//System.out.println(findNode(root,n1,n5).value);System.out.println(findNode(root,n3,n4).value);}//找到两个结点的最近公共祖先public static BinaryTreeNode findNode(BinaryTreeNode root, BinaryTreeNode node1, BinaryTreeNode node2){Stack<BinaryTreeNode> s = new Stack<BinaryTreeNode>();BinaryTreeNode n = null;//遍历到的第二个结点BinaryTreeNode r = null;//首先遍历到的第一个结点boolean flag = false;//是否查询到了第一个结点boolean flag1 = false;//两个结点是否有一个结点是公共祖先结点BinaryTreeNode result = null;//如果不是一个公共结点就返回result结点while(root!=null || !s.isEmpty()){if(root!=null){if(!flag && (root == node1 || root == node2)){flag = true;if(root == node1){n = node2;r = node1;}else{n = node1;r = node2;}}if(root == n){if(!flag1){return r;}else{return result;}}s.push(root);System.out.println(root.value);root = root.leftNode;}else{result = s.pop();if(result == r){flag1 = true;}root = result.rightNode;}}return null;}}

0 0
原创粉丝点击