我正在尝试将节点插入到我的树中。
public void addNode(BinaryTree playerOrTeamLeaf) {
if (left == null) {
left = new BinaryTree(playerOrTeamLeaf);
return;
} else if (left != null) {
left.addNode(playerOrTeamLeaf);
}
if (right == null) {
right = new BinaryTree(playerOrTeamLeaf);
return;
} else if (right != null) {
right.addNode(playerOrTeamLeaf);
return;
}
}
你可以说这是一棵麻烦的树。这就是树目前的样子。
a
b
d
e
正如您可以告诉左边条件是否先运行,这就是导致问题的原因。
我的目标是一棵漂亮的平等树。我知道问题是说我们有一个大小为4 IE的树。
A
B
C
我的逻辑代码沿着这个伪代码的行(这是第5个叶子的插入)运行它从'A'开始我们插入'D:
if left is null then left is equal to a new Node then return; | left = 'B'
else if left is not null
go to left object add method and pass in 'E';
if left is null then left is equal to a new Node then return; | left = 'C' else if left is not null
go to left object add method and pass in 'E';
if left is null then left is equal to a new Node then | //seee below
所以这让我的树看起来像这样。
A
B
D
E
我知道这是因为第一个if声明,但是如何解决这个问题的逻辑让我感到茫然。我试图交换左右语句,但这只是翻转了树生长的一面。
我知道这是一个链接列表,但我不确定如何绕过这样做。
有什么想法吗?
答案 0 :(得分:0)
非常一般的想法是这样的:
BinaryTree insert(Binary tree, int value) {
if (tree == null) {
return new BinaryTree(value);
}
if (value < tree.value) {
tree.left = insert(tree.left, value);
} else if (value > tree.value) {
tree.right = insert(tree.right, value);
}
return tree;
}
BinaryTree tree = null;
tree = insert(tree, 19);
tree = insert(tree, 7);
tree = insert(tree, 23)
tree = insert(tree, 11);
19
/\
7 23
\
11
7 11 19 23
确保在一个地方插入。