2016-05-27 22 views
-2

以下是C++中的一个简单的二叉树代码,我试图实现,但在运行代码时这些值正在被替换。二叉树实现 - 分支上的数字正在被替换

#include<iostream> 
using namespace std; 

class bst 
{ 
private: 
    struct node 
    { 
     int data; 
     node *left; 
     node *right; 
    }; 
public: 
    node *start = NULL; 

    node* create_node(node*p,int a) 
    { 

     if (p == NULL) 
     { 
      node *n1 = new node; 
      n1->data = a; 
      n1->left = NULL; 
      n1->right = NULL; 
      return n1; 
     } 

     else 
     { 
      if (a > p->data) 
      { 
       p->right = create_node(p->right, a); 
      } 
      else if(a < p->data) 
      { 
       p->left = create_node(p->left, a); 
      } 
     } 

    } 

}; 

int main() 
{ 
    bst l1; 
    int a[10] = { 12, 4, 3, 9, 6, 5, 10, 13, 34, 23 }; 
    l1.start=l1.create_node(l1.start,a[0]); 
    for (int i = 0; i < 10; i++) 
    { 
     l1.create_node(l1.start, a[i]); 
    } 
    return 0; 
} 

任何人都可以请指出我在哪里出错了。 当我进行Inorder遍历时,我的输出是10 12 23. 当我通过带有断点的代码时,我看到每个分支下的数字被替换。

+1

是你的编译器不给你关于警告/错误的变化缺少create_node的返回值? – kfsone

+0

你的'create_node'返回* what *,again?仔细查看代码。如果你的编译器*不是*给你一个类似于'main.cpp:44:5的警告:控制可能会到达非空函数的末尾',那么你真的需要打开警告级别。如果它*给出了这个警告,那么在完全理解它们的含义之后,修正它(和任何其他警告)*。 – WhozCraig

+0

我看不到这段代码是否错误。我强烈怀疑你的inorder函数是错误的。我继续测试代码,它工作得很好。你能分享你的inorder代码吗? –

回答

0

我的中序功能是:

void printInorder(node* node) 
    { 
     if (node == NULL) 
      return; 


     printInorder(node->left); 

     printf("%d ", node->data); 

     printInorder(node->right); 
    } 

我发现了问题,使得它的工作是类似于Vallabh提出一些

if (a > p->data) 
      { 
       if (p->right == NULL) 
       { 
        p->right = create_node(p->right, a); 
       } 
       else 
       { 
        create_node(p->right, a); 
       } 
      }