插入二叉树

时间:2012-03-12 14:53:29

标签: c binary-tree

如何以递归方式在二叉树中执行插入,以便始终从左侧填充???以下是我写的代码当然是错误的......我在递归方面有点弱......请提供你的建议......

void insert(node **root,int n)
{
     node *temp;
     temp=(node *)malloc(sizeof(node));
     temp->data=n;
     temp->lchild=NULL;
     temp->rchild=NULL;
     if(*root==NULL)
     {
         *root=temp;
         return;
     }
     if((*root)->lchild==NULL)
     {
          (*root)->lchild=temp;
          return;
     }
     if((*root)->rchild==NULL)
     {
          (*root)->rchild=temp;
          return;
     }
     insert(&((*root)->lchild),n);
     insert(&((*root)->rchild),n);
     return;
}

2 个答案:

答案 0 :(得分:0)

  1. 不要将malloc的返回值强制转换为C程序。
  2. 您的程序可能会将n插入两个子树。

答案 1 :(得分:0)

尝试迭代方式。另外,根据上述用户的建议,你会得到一个像left-> left-> left等的列表。

如果你以迭代方式进行wana接近

public void insert(String data)
{
    if(node == null)
        node = new Node(null,data,null);
    else
    {
        Queue<Node> q = new LinkedList<Node>();
        q.add(node);
        while(q.peek() != null)
        {
            Node temp = q.remove();
            if(temp.left != null)
                q.add(temp.left);
            else
            {
                temp.left = new Node(null,data,null);
                break;
            }

            if(temp.right != null)
            {
                q.add(temp.right);
            }
            else
            {
                temp.right = new Node(null,data,null);
                break;
            }
        }
    }
}

上面的代码是Java。我想它很容易在C中实现。