前言
学习了如何利用前序遍历和中序遍历来重建二叉树,我就在思考是否知道了任意两种遍历方式,都能将二叉树重构出来呢?仔细研究了一晚,果然如此。
找规律
先看三种遍历方式
struct Tree{
int val;
Tree *left;
Tree *right;
};
void printTree(Tree *node,int mode){
if(node!=nullptr){
switch(mode){
case 1:
cout<<node->val<<",";
printTree(node->left, mode);
printTree(node->right, mode);
break;
case 2:
printTree(node->left, mode);
cout<<node->val<<",";
printTree(node->right, mode);
break;
case 3:
printTree(node->left, mode);
printTree(node->right, mode);
cout<<node->val<<",";
break;
default:
break;
}
}
}
代码不多说,都明白,1、2、3分别对应前、中、后序遍历。
首先最重要的一个规律就是,除去根结点的数

本文探讨了如何利用前序遍历、中序遍历或后序遍历中的任意两种来重建二叉树。通过找寻遍历规律,如前序遍历的第一个元素是根节点,后序遍历的最后一个元素也是根节点,可以逐步划分并构建树的结构。文章通过具体例子详细阐述了重建过程,并提到了特殊情况的处理,如子树为空的情况。
最低0.47元/天 解锁文章
2060





