給定乙個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。
設節點 rootroot 為節點 p, qp,q 的某公共祖先,若其左子節點 root.leftroot.left 和右子節點 root.rightroot.right 都不是 p,qp,q 的公共祖先,則稱 rootroot 是 「最近的公共祖先」 。
注意:此二叉樹並非搜尋二叉樹。
要找到這樣乙個節點,p,q分布在該節點兩側,這就是最近公共祖先
終止條件:
1.如果p,q任一節點為root,說明p,q節點是父子節點,不為root的節點肯定在root的其中一側,直接返回root
2.越過葉子結點,返回null
public treenode lowestcommonancestor(treenode root, treenode p, treenode q)
//向左查詢
treenode lefttreenode=lowestcommonancestor(root.left,p,q);
//向右查詢
treenode righttreenode=lowestcommonancestor(root.right,p,q);
if (lefttreenode==null&&righttreenode==null)else if(lefttreenode!=null&&righttreenode!=null)else if(lefttreenode!=null)else
}
LeetCode236 二叉樹最近祖先
思考 這個函式就是查詢p,q兩個節點的祖先,然後給了這棵樹的root,1 它先進行判斷,根節點是不是null 或者根節點是否是p q,要是有乙個是,那祖先就肯定是root 2 它用了遞迴的思想去查詢左右兩個子樹,因為pq的祖先要麼在左邊,要麼就在右邊,所以肯定能找到乙個祖先。3 若找到的left 子...
LeetCode 236 二叉樹最近公共祖先
leetcode 236 二叉樹最近公共祖先 236.二叉樹的最近公共祖先 題目描述 給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。解體思路 分兩部分解決 第一部分 實現判斷兩個結點包含於某根節點的子樹內 第二部分 先序遍歷二叉樹,如果根節點的子樹包含qp目標結點 傳入左孩子,進行遞迴。傳入...
leetcode 236 二叉樹最近公共祖先
給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 示例 1 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 ...