转换原始的二叉树使其装饰为预索引

转换原始的二叉树使其装饰为预索引

我已经走了,它适用于左子树,但不适用于右树。

我很亲密,但是我的逻辑是错误的,任何人都可以帮助纠正和解释此逻辑。

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/

10-08 22:26