//不能覆蓋p,q其中乙個是另乙個的祖先的情況
class
solution
else
if(l || r)
return
true
;//其中一棵子樹找到了p或q,往上層傳遞
else
return
false
;//兩棵廢物子樹,都找不到p,q
} treenode*
lowestcommonancestor
(treenode* root, treenode* p, treenode* q)};
//強行這麼寫,太麻煩了
class
solution
bool l =
dfs(root-
>left, p, q)
;bool r =
dfs(root-
>right, p, q);if
(l && r)
else
if(l || r)
return
true
;//其中一棵子樹找到了p或q,往上層傳遞
else
return
false
;//兩棵廢物子樹,都找不到p,q
} treenode*
lowestcommonancestor
(treenode* root, treenode* p, treenode* q)
};
因此,嘗試返回值用treenode*,返回空說明當前子樹為空,或者當前子樹找不到目標p或q;返回非空說明當前子樹找到了目標p或q:包括本身root是p或q,以及左右子樹找到了p或q;
③在回溯的過程中,必然要遍歷整顆二叉樹,即使已經找到結果了,依然要把其他節點遍歷完,因為要利用遞迴函式的返回值作邏輯處理:
//遍歷整棵樹
auto l =
dfs(root-
>left)
;auto r =
dfs(root-
>right)
;使用l和r作邏輯處理,
//遍歷某條邊if(
dfs(root-
>left)
)return..
.if(dfs
(root-
>right)
)return..
.
④當l,r均為非空(下圖節點7),很好理解,說明左右子樹各找到乙個目標;若其中乙個為空時(節點6,10,8),應返回另乙個,是因為要把p,q逐層傳上去(節點6),或者找到最近公共祖先後,把該祖先逐層傳上去(節點10,8);
劍指Offer 68 II 二叉樹的最近公共祖先
劍指offer contents思路2 到p,q的路徑的最後共同節點 解答解答2 到p,q的路徑的最後共同節點 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 3。示例 2 輸入 root 3,5,1...
劍指offer 55 II 平衡二叉樹
題目鏈結 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。示例 1 給定二叉樹 3,9,20,null,null,15,7 3 9 20 15 7 返回 true 示例 2 給定二叉樹 1,2,2,3,3,null,nu...
劍指offer55 II 平衡二叉樹
題目 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。分析 平衡二叉樹 balance tree 的定義是 二叉樹中任意節點的左右子樹的深度相差不超過1。注意是任意節點,並不只是根節點的 左深度 右深度 還有其子樹也必須是平衡二叉樹。從該定義也可知是利用遞迴來解決這個問題。class soluti...