牛客劍指Offer面試題8 二叉樹的下乙個節點

2021-10-01 10:57:32 字數 910 閱讀 9095

題目描述

給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。

思路已知題幹為中序遍歷,則對於以下情況,下一節點分別是:

1.如乙個節點有右子樹,該節點的下一節點為它的右子樹的最左子節點

如下圖中b->h, a->f

2.如乙個節點沒有右子樹,且該節點為父節點的左子節點,則該節點的下一節點為它的父節點

如下圖中d->b, f->c

3.(較複雜情況)如乙個節點沒有右子樹(圖中i),且它還是其父節點的右子節點:

則我們沿著指向該節點父節點的指標一直向上遍歷,直至找到乙個節點(圖中b)(該節點是其父節點的左子節點),則該節點的父節點(圖中a)即為 所求節點的下一節點

即下圖中i->a

複習出錯:如果從乙個結點出發(圖中g)一直向上,找不到乙個結點是其父節點的左子結點,則該節點(圖中g)沒有下乙個結點

}//下面為當前節點無右子樹時

//判斷是否為根節點

else

if(pnode-

>next !=

nullptr

)//不執行while直接跳至此為情況2

pnext = pparent;

}//是根節點時直接返回此時的pnext(nullptr)

return pnext;}}

;

劍指Offer 牛客版 面試題7 重建二叉樹

題目 輸入某二又樹的前序遍歷和中序遍歷的結果,請重建該二樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。完整 definition for binary tree struct treenode class solution 遞迴呼叫函式建立左子樹 root left reconstruc...

《劍指Offer》面試題 平衡二叉樹

題目 輸入乙個二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。思路 用後序遍歷實現 先遍歷節點的左右子樹,左右子樹都平衡才來判斷該節點是否平衡,如果左右子樹中有不平衡的,則直接返回false,避免了從上往下逐個節點地計算深度帶來...

牛客《劍指Offer》 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。二叉樹原本可以用遞迴的方式定義,所以面對此類問題注意向遞迴的思想靠攏。將整棵樹的構造過程視為對其左右子樹的構造過程,關鍵如何劃分子樹...