タイトル説明
バイナリツリーやサイトの1を考えると、どのように注文トラバーサルシーケンス内の次のノードを見つけるには?ツリーは、他の2つは左と右の子ポインタ、および親ノードを指すポインタを参照してくださいノード
public class Node {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode parent = null;
Node(int val) {
this.val = val;
}
}
思考
- 右のサブツリーを持っているとき左端ノードの右部分木の次のノード
- 親ノードを見つけるために時間のない右部分木ません。現在のノードの親ノードが子を残し?はい、親ノードに戻ります。、その後、見つからない親ノードが1つの親の左の子であるかどうかを判断するために、片方の親の親に見下ろし、それが直接の親ノードを返し保持しません...
public class GetNextNode {
public static class Node{
int val;
Node left;
Node right;
Node parent;
public Node(int data){
this.val = data;
}
}
public Node getNextNode(Node node){
if(node == null) return null;
// 有右子树
if(node.right != null){
while(node.left != null){
node = node.left;
}
return node;
}
// 没有右子树
while(node.parent != null){
if(node.parent.left == node) return node.parent;
node = node.parent;
}
return null;
}
}
- リスト項目