我遇到的问题是这个。
每个节点由两个位x1和x2表示。如果节点有左
孩子,x1是1否则,x1为0。同样地,对于一项权利
子级,x2可以是1或0有了这个规则,我们可以代表
二叉树下的一个位序列,由一个前序遍历形成为了
例如,从“11010011001000”,我们可以构造以下树。
编写一个递归函数,它可以接受给定的特定位序列
通过预序遍历构造二叉树。
现在,我已经从一个类似的问题中得到了信息,但是它看起来很不一样,因为在这个例子中,您必须同时考虑单个节点的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/