1. 程式人生 > >二叉樹中任意兩個節點的最近公共祖先

二叉樹中任意兩個節點的最近公共祖先

stc node comm cnblogs blog style == spa 發現

public class Solution {  
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {  
        //發現目標節點則通過返回值標記該子樹發現了某個目標結點  
        if(root == null || root == p || root == q) return root;  
        //查看左子樹中是否有目標結點,沒有為null  
        TreeNode left = lowestCommonAncestor(root.left, p, q);  
        
//查看右子樹是否有目標節點,沒有為null TreeNode right = lowestCommonAncestor(root.right, p, q); //都不為空,說明做右子樹都有目標結點,則公共祖先就是本身 if(left!=null&&right!=null) return root; //如果發現了目標節點,則繼續向上標記為該目標節點 return left == null ? right : left; } }

感覺很奇妙

二叉樹中任意兩個節點的最近公共祖先