我已经走了,它适用于左子树,但不适用于右树。
我很亲密,但是我的逻辑是错误的,任何人都可以帮助纠正和解释此逻辑。
public static MyNode preOrderNumbering(MyNode n) {
if (n != null) {
n.obj = 0; // Set root decoration to 0;
preOrderHelper(n, 1); // Set decorations according to preorder.
}
return n;
}
public static MyNode preOrderHelper(MyNode n, int counter) {
if (n != null) {
if (n.left != null) {
n.left.obj = counter++; // Set the left object decoration to current count + 1;
preOrderHelper(n.left, counter);
}
if (n.right != null) {
n.right.obj = counter++; // Set the left object decoration to current count + 1;
preOrderHelper(n.right, counter);
}
}
return n;
}
之前:
后:
最佳答案
您需要使用在counter
上发现的所有内容来更新left
,然后再进入right
。
像这样:
public static int preOrderNumbering(MyNode n, int count){
if(n != null){
n.obj = ++count;
count = preOrderNumbering(n.left, count);
count = preOrderNumbering(n.right, count);
}
return count;
}
关于java - 转换原始的二叉树使其装饰为预索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15486523/