Tree Traversals
来源:互联网 发布:矩阵的逆 编辑:程序博客网 时间:2024/05/20 20:21
1020. Tree Traversals (25)
Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (<=30), the total number of nodes in the binary tree. The second line gives the postorder sequence and the third line gives the inorder sequence. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in one line the level order traversal sequence of the corresponding binary tree. All the numbers in a line must be separated by exactly one space, and there must be no extra space at the end of the line.
Sample Input:72 3 1 5 7 6 41 2 3 4 5 6 7
Sample Output:4 1 6 3 5 7 2
本题是根据后序和中序求二叉树的问题,解题思路如下:
后序数列的最后一个数字是该树的根。
在中序数列中找到根的位置,那么根的左边就是左子树,右边是其右子树
递归调用左子树和右子树,直到数列长度为零
再用广度搜索的方法遍历该二叉树
#include <iostream>#include <vector>#include <queue>using namespace std;struct Node {Node* leftChild;Node* rightChild;int element;};Node* binaryTree(int postorderIndex,int inorderIndex,int length);void printTree(Node* root);vector<int> postorder, inorder;int main() {int n;cin >> n;postorder.resize(n);inorder.resize(n);for (int i = 0;i < n;i++)cin >> postorder[i];for (int i = 0;i < n;i++)cin >> inorder[i];Node *tree = binaryTree(0, 0, n);printTree(tree);system("pause");return 0;}Node* binaryTree(int postorderIndex, int inorderIndex, int length){if (length == 0)return NULL;Node *root = (Node*)malloc(sizeof(Node));//the last number of post order is the root of the subtreeroot->element = postorder[postorderIndex + length - 1];//find root in inorder sequenceint indexOfRoot, leftLength, rightLength;for(int i =0;i<length;i++){if (inorder[inorderIndex+i] == root->element) {indexOfRoot = inorderIndex + i;leftLength = i;rightLength = length - leftLength - 1;break;}}//find leftSubTreeroot->leftChild = binaryTree(postorderIndex, inorderIndex, leftLength);//find rightSubTreeroot->rightChild = binaryTree(postorderIndex + leftLength, indexOfRoot + 1, rightLength);//recallreturn root;}void printTree(Node* root) {queue<Node*> que;que.push(root);Node* index;bool firstOut = true;while (!que.empty()) {index = que.front();if (index->leftChild != NULL)que.push(index->leftChild);if (index->rightChild != NULL)que.push(index->rightChild);if (!firstOut)cout << ' ' << index->element;//there are no space in front of the first numberelse {cout << index->element;firstOut = false;}que.pop();}}
- Tree Traversals
- Tree Traversals
- Tree Traversals
- HDOJ1710 Binary Tree Traversals
- traversals for Binary Tree
- HDOJ1710 Binary Tree Traversals
- hdoj1710Binary Tree Traversals
- 1020. Tree Traversals
- pat 1020 Tree Traversals
- 1020. Tree Traversals (25)
- 1020. Tree Traversals
- HDU1710:Binary Tree Traversals
- Hdu Binary Tree Traversals
- PAT_1020: Tree Traversals
- PAT 1020 Tree Traversals
- 【PAT】1020. Tree Traversals
- 1020. Tree Traversals (25)
- hdu Binary Tree Traversals
- Mysql+servlet实现分页
- Oracle基本操作--数据查询
- mysql left join写法
- Spring JMS 整合Tomcat和ActiveMQ
- 愚蠢的傲慢
- Tree Traversals
- 测试Makefile
- APP弱网测试方案
- Java实现LRU缓存
- mysql安装使用
- Spring事务属性详解
- 可复用面向对象软件基础——设计模式(三)之抽象工厂模式
- 测试libev
- CUDA统一内存、零复制内存、锁页内存