由二叉樹的前序和中序如何得到二叉樹的后序呢?
在山城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),營銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,山城網(wǎng)站建設(shè)費(fèi)用合理。
首先得明白什么是前序、中序、后序。
二叉樹前序:遍歷順序?yàn)?,根?jié)點(diǎn)、左子樹、右子樹;中序:遍歷順序?yàn)?,左子樹、根?jié)點(diǎn)、右子樹;后序:遍歷順序?yàn)?,左子樹、右子樹、根?jié)點(diǎn)
可以發(fā)現(xiàn),二叉樹前序中的第一個(gè)節(jié)點(diǎn)為樹的根節(jié)點(diǎn)root,然后找出root在中序里面的位置,就可以把前序和中序分別劃分為左、右子樹兩個(gè)部分,然后遞歸調(diào)用即可。
#includeusing namespace std; template struct BinaryTreeNode { T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(const T& x) :_data(x) , _left(NULL) , _right(NULL) {} }; template class BinaryTree { protected: BinaryTreeNode * _root; protected: void _PreOrder(BinaryTreeNode * root) { if (root != NULL) { cout << root->_data << " "; _PreOrder(root->_left); _PreOrder(root->_right); } return; } BinaryTreeNode * _CreateBinary(char* preOrder, char* inOrder, int length) { BinaryTreeNode * 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 (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 * 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 bt; bt.CreateBinaryTree(preOrder, inOrder); bt.PreOrder(); }