插入二叉树节点

时间:2016-04-05 20:39:00

标签: java binary-tree

我正在尝试将节点插入到我的树中。

   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声明,但是如何解决这个问题的逻辑让我感到茫然。我试图交换左右语句,但这只是翻转了树生长的一面。

我知道这是一个链接列表,但我不确定如何绕过这样做。

有什么想法吗?

1 个答案:

答案 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

确保在一个地方插入。