Tree-----最低公共祖先系列

来源:互联网 发布:php网站开发实例教程 编辑:程序博客网 时间:2024/06/05 15:56

1.BST中的最低公共祖先

原题目

在BST中的特殊形式使得假如出现了一个数比其中一个小,比另一个大就是复合题意了。不可能出现还有另外的情况。

 public TreeNode lowestCommonAncestor(TreeNode node, TreeNode p, TreeNode q) {        TreeNode root=node;        if(root.val>=p.val&&root.val<=q.val){            return root;        }else if(root.val>p.val&&root.val>q.val){            return lowestCommonAncestor(root.left,p,q);        }else if(root.val<p.val&&root.val<q.val){            return lowestCommonAncestor(root.right,p,q);        }        return node;    }

这里还要考虑的应该是给的两个节点的相对大小,我认为为了健壮性应该要自己先比较一下确认大小

2.一般二叉树的最低公共祖先

原题目

假如当前的节点为正常节点,我的左子树找到了一个结果,事实上这个结果只能是p,q之一。倘若此时右子树什么都没有找到的话就是左子树的结果作为结果了。假如右子树也找到了一个结果,同样只能是p,q之一,那么 此时的当前节点就是我们寻找的最低公共祖先。

 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {        if (root == null) {            return null;        }        if (root == p || root == q) {            return root;        }        TreeNode left = lowestCommonAncestor(root.left, p, q);        TreeNode right = lowestCommonAncestor(root.right, p, q);        if (left != null && right != null) {            return root;        } else {            return (left != null) ? left : right;        }    }
原创粉丝点击