首先利用自底向上的思路——如果遍歷到當前節點是a/b中的任意乙個,則向父節點匯報此節點,否則遞迴到節點為null時返回null值。
具體情況如下幾種:
1.當前節點即為兩個節點中的乙個,此時直接向父節點返回當前節點;
2.遞迴到null,返回null;
3.當前節點不是兩個節點中的乙個,此時判斷左右子樹的返回結果:
。若左右子樹均返回非空值,那麼當前節點一定為所求節點,將當前節點逐層向上匯報。//兩個節點分居樹的兩側
。若左右子樹只有乙個返回非空值,則繼續將此非空值向上層匯報。//節點僅存在於樹的一側
。若左右結點均返回null,繼續向上層返回null。
注:此種解法若樹中只有乙個節點時會誤判。
public class solution
treenode left=lca(root.left,first,second);
treenode right=lca(root.right,first,second);
if(left!=null&right!=null)else if(left!=null)else if(right!=null)else
}}
二叉樹 在二叉樹中找到乙個節點的前驅節點
二叉樹 在二叉樹中找到乙個節點的後繼節點 可以將該結點分為兩種情況,1.沒有左子樹,那它是某乙個結點的右子樹的最左結點,然後找到這個右子樹的parent即可 找它的parent,直到當前節點是parent的右子樹為止 2.有左子樹,那前驅節點就是它的左子樹的最右結點 public static no...
在二叉樹中找到兩個節點的最近公共祖先 I
給定一棵二叉樹的頭節點 head,以及這棵樹中的兩個節點 o1 和 o2,請返回 o1 和 o2 的最 近公共祖先節點。說明 o1和o2要麼同時都在二叉樹上,要麼同時都不在二叉樹上。後序遍歷二叉樹,假設遍歷到的當前節點為 cur。因為是後序遍歷,所以 先處理 cur 的兩棵子樹。假設處理 cur 左...
在二叉樹中找到兩個節點的最近公共祖先 高階
在二叉樹中找到兩個節點的最近公共祖先 高階 給定一棵二叉樹,多次給出這棵樹上的兩個節點 o1 和 o2,請對於每次詢問,找到 o1 和 o2 的最近公共祖先節點。輸入描述 第一行輸入兩個整數 n 和 root,n 表示二叉樹的總節點個數,root 表示二叉樹的根節點。以下 n 行每行三個整數 fa,...