二叉树的创建

Posted 热爱编程的大忽悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的创建相关的知识,希望对你有一定的参考价值。

定义二叉树类



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


二叉树创建代码:

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;

以上是关于二叉树的创建的主要内容,如果未能解决你的问题,请参考以下文章

c++如何用非递归的算法去创建二叉树,有没有分层建立二叉树的方法

Java实现二叉树的创建递归/非递归遍历

数据结构-二叉树的创建?

Python 二叉树的创建和遍历、重建

数据结构_011_二叉树的创建和遍历

二叉树的遍历