題目:
給定一個二叉樹和其中的一個結(jié)點,請找出中序遍歷順序的下一個結(jié)點并且返回。注意,樹中的結(jié)點不僅包含左右子結(jié)點,同時包含指向父結(jié)點的指針。
思路:
根據(jù)中序遍歷的思路然后進行歸納, 分為兩種類型有右子樹,無右子樹
1.有右子樹的節(jié)點的下一個節(jié)點,是當前節(jié)點右子樹最左節(jié)點.
2.無右子樹的節(jié)點,如果當前節(jié)點是父節(jié)點的左子節(jié)點,下一個節(jié)點就是父親節(jié)點.
3.無右子樹的節(jié)點, 如果當前節(jié)點是父親節(jié)點的右子節(jié)點,下一個節(jié)點就是父親節(jié)點的下一個節(jié)點...
4.其他情況的下一個節(jié)點就為null
代碼:
public class GetNext
{
/**
* @param pNode
* @return
*/
public TreeLinkNode GetNext(TreeLinkNode pNode){
if(pNode == null)
return null;
if(pNode.right != null){
pNode = pNode.right;
while(pNode.left != null)
pNode = pNode.left;
return pNode;
}
while(pNode.next != null){
if(pNode.next.left == pNode){
return pNode.next;
}
pNode = pNode.next;
}
//遍歷結(jié)束還不符合這兩種條件的1.是最后的節(jié)點沒有父節(jié)點 2.是不存在這個節(jié)點
return null;
}
}