面試題8 二叉樹的下乙個結點

2022-06-01 19:30:06 字數 1000 閱讀 8201

// 面試題8:二叉樹的下乙個結點

// 樹中的結點除了有兩個分別指向左右子結點的指標以外,還有乙個指向父結點的指標。

// 二叉樹的結構體定義如下。

以上圖為例,節點有沒有左子樹不影響,因為左子樹肯定會在節點之前被遍歷。

如果輸入節點有右子樹,比如根節點a有右子樹c,但是節點c可能是其他左子樹的根節點,所以中序遍歷不能選擇c。

應該從c的左子樹一條路走到黑,走到葉結點為止,這樣才是中序遍歷節點a的下乙個節點。

如果輸入節點沒有右子樹,遍歷之後應該繼續向上遍歷(如果父節點存在的話)。

如果節點是上一級節點的右子樹,說明這乙個小區域的中序遍歷已完成,應該沿右子樹一直向上回溯。

比如i節點一直回溯到b節點,b節點及b的子樹都已經作為a的左子樹被遍歷完成,下乙個就應該遍歷b的父節點a。

不知道我有沒有寫明白,語言表述能力不太好,大概就是那麼個意思。

binarytreenode getnext(binarytreenode* pnode)

return pright;

}else if(pnode是父節點右子樹)

return pparent的父節點;

}else

}

作者的**是做了一些優化的,pnode是上一級節點的右子樹/左子樹的公共**被提出來了,我還是看了兩分鐘才想明白,太菜了。。

binarytreenode* getnext(binarytreenode* pnode) 

//pnode沒有右子樹

else if(pnode->m_pparent!=nullptr)

//pnode是父節點的左子樹,直接向上遍歷

pnext = pparent;

} return pnext;

}

面試題8 二叉樹的下乙個結點

面試題8 二叉樹的下乙個結點 樹中的結點除了有兩個分別指向左右子結點的指標以外,還有乙個指向父結點的指標。二叉樹的結構體定義如下。以上圖為例,節點有沒有左子樹不影響,因為左子樹肯定會在節點之前被遍歷。如果輸入節點有右子樹,比如根節點a有右子樹c,但是節點c可能是其他左子樹的根節點,所以中序遍歷不能選...

面試題08 二叉樹的下乙個結點

給定一棵二叉樹的其中乙個節點,請找出中序遍歷序列的下乙個節點。注意 如果給定的節點是中序遍歷序列的最後乙個,則返回空節點 二叉樹一定不為空,且給定的節點一定不是空節點 樣例 假定二叉樹是 2,1,3,null,null,null,null 給出的是值等於2的節點。則應返回值等於3的節點。解釋 該二叉...

面試題8 二叉樹的下乙個節點

題目 二叉樹的下乙個節點 給定一棵二叉樹和其中的乙個節點,如何找到中序遍歷序列的下乙個節點?樹中的節點除了有兩個分別指向左 右子節點的指標 還有乙個指向父節點的指標。完整 public class getnext public treenode p getnexttreenode p treenod...