由二叉树的前序和中序如何得到二叉树的后序呢?

发布时间:2020-08-01 07:35:27 作者:小止1995
来源:网络 阅读:406

由二叉树的前序和中序如何得到二叉树的后序呢?

首先得明白什么是前序、中序、后序。

二叉树前序:遍历顺序为,根节点、左子树、右子树;中序:遍历顺序为,左子树、根节点、右子树;后序:遍历顺序为,左子树、右子树、根节点

可以发现,二叉树前序中的第一个节点为树的根节点root,然后找出root在中序里面的位置,就可以把前序和中序分别划分为左、右子树两个部分,然后递归调用即可。

由二叉树的前序和中序如何得到二叉树的后序呢?

#include<iostream>
using namespace std;
template<class T>
struct BinaryTreeNode
{
	T _data;
	BinaryTreeNode* _left;
	BinaryTreeNode* _right;
	BinaryTreeNode(const T& x)
		:_data(x)
		, _left(NULL)
		, _right(NULL)
	{}
};
template<class T>
class BinaryTree
{
protected:
	BinaryTreeNode<T>* _root;
protected:
	void _PreOrder(BinaryTreeNode<T>* root)
	{
		if (root != NULL)
		{
			cout << root->_data << " ";
			_PreOrder(root->_left);
			_PreOrder(root->_right);
		}
		return;
	}
	BinaryTreeNode<T>* _CreateBinary(char* preOrder, char* inOrder, int length)
	{
		BinaryTreeNode<T>* root = NULL;
		if (length == 0)
			return NULL;
		int tmp = *preOrder;
		int index = 0;
		while (index < length&&inOrder[index] != tmp)
			index++;
		if (index < length)
		{
			root = new BinaryTreeNode<T>(tmp-'0');
			root->_left = _CreateBinary(preOrder + 1, inOrder,index);
			root->_right = _CreateBinary(preOrder + index + 1, inOrder + index + 1, length - index - 1);
		}
		return root;
	}
	void _Clear(BinaryTreeNode<T>* root)
	{
		if (root)
		{
			_Clear(root->_left);
			_Clear(root->_right);
			delete root;
		}
	}
public:
	BinaryTree()
		:_root(NULL)
	{}
	~BinaryTree()
	{
		_Clear(_root);
		_root = NULL;
	}
	void  PreOrder()
	{
		_PreOrder(_root);
		cout << endl;
	}
	void CreateBinaryTree(char* preOrder, char* inOrder)
	{
		int length = strlen(preOrder);
		_root = _CreateBinary(preOrder, inOrder,length);
	}
};
void Test1()
{
	char* preOrder = "12473568";
	char* inOrder = "47215386";
	BinaryTree<int> bt;
	bt.CreateBinaryTree(preOrder, inOrder);
	bt.PreOrder();
}

由二叉树的前序和中序如何得到二叉树的后序呢?

推荐阅读:
  1. 创建、前序、中序、后序递归遍历二叉树
  2. 树:二叉树的前序/中序/后序/层次递归

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

二叉树 中序 知道前序

上一篇:Oracle 怎么创建一个性能最优,最安全的线上用户!

下一篇:httpclient请求

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》