首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

二叉树有关问题,求解为什么输出不了

2013-09-14 
二叉树问题,求解为什么输出不了#includeiostream#includestring#includevalarray#includevector#i

二叉树问题,求解为什么输出不了


#include<iostream>
#include<string>
#include<valarray>
#include<vector>
#include<malloc.h>
#include<math.h>
using namespace std;

typedef struct Node
{

  int data;
 struct Node* LChild;
 struct Node* RChild;
}BiTree;


void CreateTree(BiTree *t)
{
int a;
    cin>>a;
if (a==0)
{
t=NULL;
}
else {

while(a!=0)
{

 
t=new BiTree;
t->data=a;
CreateTree(t->LChild);
CreateTree(t->RChild);
}
}

}
void pri(BiTree *t)
{


    if(t!=NULL)
{
cout<<t->data;
pri(t->LChild);
pri(t->RChild);
}
}

int main()
{
 BiTree *T=new BiTree; 
 
 cout<<"请输入数据,将以完全二叉树形式建立"<<endl;
      CreateTree(T);
  pri(T);
  cout<<T->data;

return 0;
}



网上的也很多都是无法输出的,已经输入cin那里的判定条件 数据结构
[解决办法]
引用:
Quote: 引用:

建立二叉树的时候,
        t=new BiTree;
        t->data=a;
这样就行了?
光把数值放进去了,指针不连接了?
怎么改...


建立树的函数修改了,其余的自己添加,包括删除树,很简单的。
#include<iostream>
using namespace std;

typedef struct Node
{
int data;
struct Node* LChild;
struct Node* RChild;
}BiTree;

//要修改指针,参数用指针的引用
//结构没有定义父指针,用个标志来表明添加左指针还是右指针
void CreateTree(BiTree*& t, int flag)  
{
int a;
//这里要处理cin输入出错的情况
cin >> a;
while(!cin)
{
cin.clear();
cin.ignore();
cout << "输入错误,重新输入:\n";


cin >> a;
}
if (a == 0)
{
return;
}

BiTree* child;
if (t == NULL)  //NULL是根节点
{
t = new BiTree;
child = t;
}
else
{
child = new BiTree;
//连接上父节点
if (flag == 0)
t->LChild = child;
else
t->RChild = child;
}
child->data = a;
child->LChild = NULL;
child->RChild = NULL;
CreateTree(child, 0);
CreateTree(child, 1);
}

void pri(BiTree* t)
{
    if(t!=NULL)
{
cout << t->data << ' ';
pri(t->LChild);
pri(t->RChild);
}
}

int main()
{
BiTree *T = NULL; 

cout<<"请输入数据,将以完全二叉树形式建立"<<endl;
CreateTree(T, 0);
pri(T);
cout << endl;

return 0;
}


[解决办法]
这个是指针丢失了吧..你new的时候,原来的地址就会被丢弃,所以必须手动和父节点连接。
一般都是另建一个节点,然后t->left=child之类的,不会直接拿父节点new一下的。你看看5#的方法吧,二叉树的简单操作不难。

热点排行