カジュアルワーキング
前記ノードの指定されたバイナリツリーは、先行順走査順序とリターンの次のノードを見つけます。ツリー内のノードは、左と右の子ノードではないだけを含むことに注意してください、親ノードは、を指すポインタが含まれています。
栗の場合:
2
5 6
1 3 4 7
9
図1に示すように、次のノードは次のノードが9である2,3- 5,9約ノードです。
思考
私たちは、親ノードへのポインタを知っているので、あなたは、詳細な分析を行うことができます。
- ない兄弟ノード、親ノードの左サブツリーの、場合、例えば1次ノードである親ノードです。
- 左右のサブツリーまたはサブツリー・ノードのために右、左及び右サブツリーないサブツリーを有しています。図3及び図5は、例えば、次のノードは、その右の子であること。
- ノードは、ノードの親ノードの左サブツリーにクエリをチェックする必要があります親がこの時間、例えば5、独自のあるなし左ノードと右のサブツリーのために、次のノード9である5父。
- 右サブツリー及び右サブツリーの例えば次のような2再帰ノードの左下サブツリー左サブツリーは、4である場合。
コード
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
TreeLinkNode head=pNode;
if(head==null) return null;
if(head.right!=null)
{
TreeLinkNode p=head.right;
while(p.left!=null)
p=p.left;
return p;
}
while(head.next!=null){
if(head.next.left==head) return head.next;
head=head.next;
}
return null;
}
}