我遇到的问题是这个。
每个节点由两个位x1和x2表示。如果节点有左
孩子,x1是1否则,x1为0。同样地,对于一项权利
子级,x2可以是1或0有了这个规则,我们可以代表
二叉树下的一个位序列,由一个前序遍历形成为了
例如,从“11010011001000”,我们可以构造以下树。
编写一个递归函数,它可以接受给定的特定位序列
通过预序遍历构造二叉树。
java - 如何使用给定的遍历给定的位序列创建递归二叉树?-LMLPHP
现在,我已经从一个类似的问题中得到了信息,但是它看起来很不一样,因为在这个例子中,您必须同时考虑单个节点的x1和x2……我已经想了好几个小时了,但是我不能用递归来想出一个好的逻辑。任何帮助都将不胜感激。谢谢!

最佳答案

一个解决方案可能是在preorder中遍历树,同时读取序列(两个值并删除它们)并在必要时添加node
既然你有这个Node

class Node {
    int value;
    public Node left;
    public Node right;
}

您可以创建这样的树:
private static void createTree(Node root) {

    if(string.isEmpty() || root == null) {
        return;
    }

    if(string.charAt(0) == '1') {
        root.left = new Node();
    }

    if(string.charAt(1) == '1') {
        root.right = new Node();
    }
    string = string.substring(2);
    createTree(root.left);
    createTree(root.right);

}

其中字符串只是全局变量:static String string = "11010011001000";
可以这样调用方法:
Node root = new Node();
createTree(root);

root将是树的实际根。

关于java - 如何使用给定的遍历给定的位序列创建递归二叉树?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47530911/

10-13 00:04