DS007-二叉树-二叉链表表示法-先根-中根-后根遍历

 本篇介绍二叉树的二叉链表表示法,及其先、中、后根遍历。

以下面这棵二叉树为例。



#include "stdafx.h"


#include<iostream> 
using namespace std;

template<typename T> class tree
{//基于二叉链表的二叉树
	struct node
	{
		T data;
		node *lchild;
		node *rchild;

	};
	node *root;
	node a, b, c, d, e;
public:
	tree()
	{//构造函数,一棵静态二叉树
		root = &a;
		a.data = 'a';
		b.data = 'b';
		c.data = 'c';
		d.data = 'd';
		e.data = 'e';
		a.lchild = &b;
		a.rchild = &c;
		c.lchild = &d;
		c.rchild = &e;
		d.lchild = d.rchild = 0;
		e.lchild = e.rchild = 0;

	}
	void preTraverse(node *root)
	{//先根遍历
		if (root)
		{
			cout << root->data << " ";
			preTraverse(root->lchild);
			preTraverse(root->rchild);
		}

	}
	void preTraverse()
	{//先根遍历
		preTraverse(root);
	}
	void InTraverse(node *root)
	{//中根遍历
		if (root)
		{
			InTraverse(root->lchild);
			cout << root->data << " ";
			InTraverse(root->rchild);
		}

	}
	void InTraverse()
	{
		InTraverse(root);

	}
	void postTraverse(node *root)
	{//后根遍历
		if (root)
		{
			postTraverse(root->lchild);
			postTraverse(root->rchild);
			cout << root->data << " ";
		}

	}
	void postTraverse()
	{
		postTraverse(root);
	}

};


int main()
{
	tree<char> t;
	t.preTraverse();
	cout << endl;
	t.InTraverse();
	cout << endl;
	t.postTraverse();
	cout << endl;
	

	return 0;
}


猜你喜欢

转载自blog.csdn.net/weixin_43917370/article/details/108609048