目錄遞迴
**實現
複雜度分析
非遞迴**實現
複雜度分析
二叉樹的最近公共祖先
遞迴遍歷整棵二叉樹,定義
自底向上從葉子節點開始更新,在所有滿足條件的公共祖先中一定是深度最大的祖先先被訪問到。
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution
public boolean dfs(treenode root, treenode p, treenode q)
boolean lson = dfs(root.left, p, q);
boolean rson = dfs(root.right, p, q);
if((lson && rson) || (root.val == p.val || root.val == q.val) && (lson || rson))
return(lson || rson || root.val == p.val || root.val == q.val);}}
時間複雜度:空間複雜度:
先用hash表儲存所有節點的父節點;利用節點的父節點從p開始往上查詢,將訪問過的節點記錄;從q節點開始往上查詢,如果碰到已經訪問過的節點,這個節點就是我們要找的最近公共祖先。
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution
dfs(root);
while(p != null)
while(q != null)
q = parentsmap.get(q);
}return null;
}public void dfs(treenode root)
if(root.left != null)
if(root.right != null)}}
實現細節:set的介面是add而不是put
時間複雜度:
空間複雜度:,雜湊表儲存的每個節點的父節點也需要
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 的最近公共祖先是節點 ...