// 面試題8:二叉樹的下乙個結點
// 樹中的結點除了有兩個分別指向左右子結點的指標以外,還有乙個指向父結點的指標。
// 二叉樹的結構體定義如下。
以上圖為例,節點有沒有左子樹不影響,因為左子樹肯定會在節點之前被遍歷。
如果輸入節點有右子樹,比如根節點a有右子樹c,但是節點c可能是其他左子樹的根節點,所以中序遍歷不能選擇c。
應該從c的左子樹一條路走到黑,走到葉結點為止,這樣才是中序遍歷節點a的下乙個節點。
如果輸入節點沒有右子樹,遍歷之後應該繼續向上遍歷(如果父節點存在的話)。
如果節點是上一級節點的右子樹,說明這乙個小區域的中序遍歷已完成,應該沿右子樹一直向上回溯。
比如i節點一直回溯到b節點,b節點及b的子樹都已經作為a的左子樹被遍歷完成,下乙個就應該遍歷b的父節點a。
不知道我有沒有寫明白,語言表述能力不太好,大概就是那麼個意思。
binarytreenode getnext(binarytreenode* pnode)作者的**是做了一些優化的,pnode是上一級節點的右子樹/左子樹的公共**被提出來了,我還是看了兩分鐘才想明白,太菜了。。return pright;
}else if(pnode是父節點右子樹)
return pparent的父節點;
}else
}
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...