由二叉樹的前序和中序如何得到二叉樹的后序呢?
在山城等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供做網站、成都網站建設 網站設計制作定制開發,公司網站建設,企業網站建設,高端網站設計,營銷型網站建設,成都外貿網站建設公司,山城網站建設費用合理。
首先得明白什么是前序、中序、后序。
二叉樹前序:遍歷順序為,根節點、左子樹、右子樹;中序:遍歷順序為,左子樹、根節點、右子樹;后序:遍歷順序為,左子樹、右子樹、根節點
可以發現,二叉樹前序中的第一個節點為樹的根節點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();
}
網頁標題:由二叉樹的前序和中序如何得到二叉樹的后序呢?
文章路徑:http://www.yijiale78.com/article22/jcshjc.html
成都網站建設公司_創新互聯,為您提供定制開發、App開發、移動網站建設、網站設計、面包屑導航、做網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯