用链表生成前序二叉树

介绍一下二叉树的3种遍历方式

前序遍历:先访问根结点,然后每个结点先遍历左孩子,再遍历右孩子

中序遍历:先从根结点开始(注意并不是先访问根结点),每个结点先遍历结点的左孩子,再遍历父结点,再遍历右孩子

后序遍历:从左到右先孩子再到父亲

我们可以用递归对二叉树进行遍历:

(以下几种遍历代码形式十分相似)

前序遍历:

void TreeTraveler(Node *node) { //用 前序遍历 对二叉树进行遍历
	if (node->data == '#')return;//空结点则返回

	cout << node->data << " "; //输出结点数据
	TreeTraveler(node->lchild); //左结点
	TreeTraveler(node->rchild); //右结点
	return;
}

中序遍历:

void TreeTraveler(Node *node) { //用 前序遍历 对二叉树进行遍历
	if (node->data == '#')return;//空结点则返回

	TreeTraveler(node->lchild);//左结点
        cout << node->data << " ";
	TreeTraveler(node->rchild);//右结点
	return;
}

后续遍历:

void TreeTraveler(Node *node) { //用 前序遍历 对二叉树进行遍历
	if (node->data == '#')return;//空结点则返回

	TreeTraveler(node->lchild);//左结点
	TreeTraveler(node->rchild);//右结点
        cout << node->data << " ";
	return;
}

不同之处就是在于输出语句顺序不一样而已

接下来,我们开始建立二叉树

如果我们要在内存中建立一个如图6-9-1左图这样的树,为了能让每个结点确认是否有左右孩子,我们对左图进行了扩展,变成了6-9-1右图的样子,也就是将二叉树中每个结点的空指针引出一个虚结点,其值为一特定值,比如 ‘#’ 。我们称这种处理后的二叉树为原二叉树的扩展二叉树。扩展二叉树 能做到遍历序列确定的一颗二叉树。

 而建立二叉树的代码和遍历二叉树的代码也十分相似,

只要把遍历二叉树的输出部分改成输入数据到结点就可以了

例如:用前序遍历建立二叉树

		T->data = data;
		Node *t;
		t = new Node; //创建 左孩子
		T->lchild = t;
		t = new Node; //创建 右孩子
		T->rchild = t;
//------------------------------------------
		CreateBiTree(T->lchild);
		CreateBiTree(T->rchild);

样例:

#include<iostream>
using namespace std;

struct Node {
	char data;
	Node *lchild; //左孩子
	Node *rchild; //右孩子
};

void CreateBiTree(Node *T) {  //对树结点进行赋值
	char data;
	cin >> data;

	if (data == '#') { //如果为结点为 虚结点 则不创建 左右孩子
		T->data = '#';
	}
	else { 
		T->data = data;
		Node *t;
		t = new Node; //创建 左孩子
		T->lchild = t;
		t = new Node; //创建 右孩子
		T->rchild = t;

		CreateBiTree(T->lchild);
		CreateBiTree(T->rchild);
	}
	return;
}

void TreeTraveler(Node *node) { //用 前序遍历 对二叉树进行遍历
	if (node->data == '#')return;

	cout << node->data << " ";
	TreeTraveler(node->lchild);
	TreeTraveler(node->rchild);
	return;
}

int main() {
	Node *T;
	T = new Node; //创建树根
	CreateBiTree(T);//由树根开始进行赋值
	TreeTraveler(T);//前序遍历树
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq742762377/article/details/81590713