定义二叉树类

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
二叉树创建代码:

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;
}
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐