二叉樹的下乙個節點

2021-10-02 21:38:39 字數 2007 閱讀 6142

題目:給定一棵二叉樹和其中的乙個節點, 如何找出中序遍歷序列的下乙個節點?樹中的節點除了有兩個分別指向左、右子節點的指標, 還有個指向父節點的指標。

如果乙個節點有右子樹, 那麼它的下乙個節點就是它的右子樹中的最左子節點。也就是說, 從右子節點出發一直沿著指向左子節點的指標, 我們就能找到它的下乙個節點。例如, 圖2.8中節點b的下乙個節點是h, 節點a的下乙個節點是f。

接著我們分析乙個節點沒有右子樹的情形。如果節點是它父節點的左子節點, 那麼它的下乙個節點就是它的父節點。例如, 圖2.8中節點d的下乙個節點是b, 節點f 的下乙個節點是c。

如果乙個節點既沒有右子樹, 並且它還是它父節點的右子節點, 那麼這種情形就比較複雜。我們可以沿著指向父節點的指標一直向上遍歷, 直到找到乙個是它父節點的左子節點的節點。如果這樣的節點存在, 那麼這個節點的父節點就是我們要找的下乙個節點。

為了找到圖2.8中節點1的下乙個節點, 我們沿著指向父節點的指標向上遍歷, 先到達節點e。由千節點e是它父節點b的右節點, 我們繼續向上遍歷到達節點b。節點b是它父節點a的左子節點, 因此節點b的父節點a就是節點1的下乙個節點。

找出節點g的下乙個節點的步驟類似。我們先沿著指向父節點的指標到達節點c。由於節點c是它父節點a的右子節點, 我們繼續向上遍歷到達節點a。由千節點a是樹的根節點, 它沒有父節點, 因此節點g沒有下

乙個節點。

**:

#include struct binarytreenode

;//具體演算法

binarytreenode *getnext(binarytreenode *pnode)

binarytreenode *pnext = nullptr;

if(pnode->m_pright != nullptr)

pnext = pright;

}else if(pnode->m_pparent != nullptr)

pnext = pparent;

}return pnext;

}// ******************** 輔助**用來構建二叉樹 ********************

binarytreenode *createbinarytreenode(int value)

void connecttreenodes(binarytreenode *pparent, binarytreenode *pleft, binarytreenode *pright)

}void printtreenode(binarytreenode *pnode)

else

printf("\n");

}void printtree(binarytreenode *proot)

}void destroytree(binarytreenode *proot)

}// ********************測試**********************

void test(char *testname, binarytreenode *pnode, binarytreenode *expected)

// 8

// 6 10

// 5 7 9 11

void test1_7()

// 5

// 4

// 3

// 2

void test8_11()

// 2

// 3

// 4

// 5

void test12_15()

void test16()

int main(int argc, char *ar**)

二叉樹的下乙個節點

問題 題目給出的預設 為 1 coding utf 8 2 class treelinknode 3 def init self,x 4 self.val x5 self.left none6 self.right none7 self.next none 8class solution 9def ...

二叉樹的下乙個節點

coding utf 8 class treelinknode def init self,x self.val x self.left none self.right none self.next none 1 該節點有左子樹,說明左邊已經遍歷過,該節點作為根節點,下一步應該填右子樹,如果該節點有...

二叉樹的下乙個節點

題目描述 給定一棵二叉樹和其中的乙個節點,如何找出中序遍歷序列的下乙個節點?樹中的節點除了有兩個分別別指向左右子節點的指標,還有乙個指向父節點的指標 例如 這棵樹的中序遍歷是 d,b,h,e,i,a,f,c,g 解題思路 3 當結點的右子樹為空,且是它父節點的左子節點時,它的下乙個節點就是它的父節點...