二叉树的创建
·
定义二叉树类




按照前序遍历的方式生成树:根左右

二叉树创建代码:
node* Tree::creat(node* root)
{
char ch = _getch();//输入该节点的信息
if (ch == '#')//表示该节点为空
{
root = NULL;
}
else
{
root = new node;
root->data = ch; //生成一个节点,数据为ch
//这里是同级指针修饰,是值传递,可以用返回值解决
root->lchild=creat(root->lchild);
root->rchild=creat(root->rchild);
}
return root;
}
#include<iostream>
using namespace std;
#include<conio.h>
struct node
{
char data;
node* lchild;
node* rchild;
};
class Tree {
private:
node* root;//指向根节点的头指针
public:
Tree() { root = creat(root); }//构造函数建立一个二叉树
~Tree() { relase(root); }//析构函数
void display(node* root);//遍历输出二叉树
node* getNode()
{
return root;
}
private:
node* creat(node* root);//调用构造函数
void relase(node* root);//析构函数调用
};
node* Tree::creat(node* root)
{
char ch;
cin >> ch;//输入该节点的信息
if (ch == '#')//表示该节点为空
{
root = NULL;
}
else
{
root = new node;
root->data = ch; //生成一个节点,数据为ch
//这里是同级指针修饰,是值传递,可以用返回值解决
root->lchild=creat(root->lchild);
root->rchild=creat(root->rchild);
}
return root;
}
void Tree::relase(node* root)
{
}
void Tree::display(node* root)
{
if (root == NULL)
return;
cout << root->data << endl;
display(root->lchild);
display(root->rchild);
}
//测试---------------------
void test()
{
Tree t1;
cout << "打印结果如下" << endl;
t1.display(t1.getNode());
}
int main()
{
test();
system("pause");
return 0;
}

引用方法创建二叉树
传入的是指针本身,不会发生同级指针修饰失败的问题,即作为实参传入的指针如果函数中形参值发生改变,那么实参指针的值也会改变

node* Tree::creat(node* &root)
{
char ch;
cin >> ch;//输入该节点的信息
if (ch == '#')//表示该节点为空
{
root = NULL;
}
else
{
root = new node;
root->data = ch; //生成一个节点,数据为ch
creat(root->lchild);
creat(root->rchild);
}
return root;
}
更多推荐
所有评论(0)