0、序
根据两种遍历还原二叉树是一道经典题型
105是根据前序遍历和中序遍历还原二叉树
106是根据后序遍历和中序遍历还原二叉树
原理相同,首先分析一下前、中、后序的遍历方式
1、前序、中序、后序遍历
先看一下代码实现:
void order(TreeNode* root) {
cout << root->val << endl; //preorder
if (root->left != NULL) postorder(root->left);
cout << root->val << endl; //inorder
if (root->right != NULL) postorder(root->right);
cout << root->val << endl; //postorder
}
从代码可以看出三种遍历只有输出顺序的区别
换成二叉树来理解就是:
- 前序遍历先访问了根节点,然后遍历左子树,直到遍历完叶子结点,继续遍历右子树。
- 中序遍历则先遍历左子树,再访问根节点,接着遍历右子树
- 后序遍历则遍历左子树、右子树,最后访问根节点
2、根据前序遍历和中序遍历还原二叉树
理解了前序遍历和中序遍历,这道题就很容易