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