オファーは、次のノード57のバイナリツリーを受賞します
タイトル
前記ノードの指定されたバイナリツリーは、先行順走査順序とリターンの次のノードを見つけます。ツリー内のノードは、左と右の子ノードではないだけを含むことに注意してください、親ノードは、を指すポインタが含まれています。
思考
ここでは、次の名前の親ノードを指して、少し愚かな名前の隣です。
- ノードは、ツリーの右の子ノードを見つけるために、左、右のサブツリーを存在する場合のシーケンスは、、、右から左れます
- 右のサブツリーが存在しない場合
- 親ノードポイントの左の子ノード場合は、次の1は、親ノードです。
- 親ノードポイントの右の子ならば、再帰的にアップ、あなたは親ノードの左端の子ノードを見つけるまで。
コード
public class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;
TreeLinkNode(int val) {
this.val = val;
}
}
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;
}
return null;
}