二叉樹中找到兩結點的共同祖先(遞迴)

2021-10-09 19:08:10 字數 619 閱讀 7805

從根節點往左右子樹遍歷過程中,對於乙個最近共同祖先的情況如下(兩結點存在的情況下):

1、當前結點就是兩結點之一,另乙個在當前結點的子樹上。

2、乙個在左、乙個在右。

可以考慮遞迴:

//res存放結果

bool findanc

(bittree bt,bittree p, bittree q, bittree &res)

if( bt == q &&

(findanc

(bt->lchild)

||findanc

(bt->rchild)))

else

if(bt == q || bt == p)

return true;

//當前是其一,但左右沒有另乙個 if(

findanc

(bt->lchild)

&&findanc

(bt->rchild)

)return

(findanc

(bt->lchild)

||findanc

(bt->rchild)

;//左子樹或右子樹有,這棵樹就有。

}}

二叉樹結點的共同祖先問題

問題描述 假設二叉樹採用二叉鍊錶方式儲存,root指向根結點,p所指結點和q所指結點為二叉樹中的兩個不同結點,且互不成為根到該結點的路徑上的點,程式設計求解距離它們最近的共同祖先。輸入形式 二叉樹的前序和中序遍歷序列,用以建立該二叉樹的鏈式儲存結構 以及二叉樹的兩個結點資料 x 和 y 輸出形式 結...

二叉樹最近共同祖先

從鍵盤接收擴充套件先序序列,以二叉鍊錶作為儲存結構,建立二叉樹。求兩個不同結點ch1,ch2的最近共同祖先。第一行 擴充套件先序序列 第二行 ch1,ch2兩個不同結點值,用乙個空格間隔。abc de g f c fb include include include typedef struct n...

二叉樹兩結點的最低共同父結點

題目 求二叉樹兩節點的最低共同父節點 求node節點是否在head樹中 bool findnode tree head,tree node tree findlastfather tree head,tree node1,tree node2 if leftnode1 leftnode2 bool ...