【算法】完全二叉树的层序遍历
题目描述已知完全二叉树的先序/中序/后序序列,求层序序列算法原理没有什么好说的,因为是完全二叉树,所以可以由根节点直接找到孩子节点如果根节点root是从0开始,那么左孩子就是root*2+1右孩子就是root*2+2如果根节点root是从1开始,那么左孩子就是root*2...
·
题目描述
已知完全二叉树的先序/中序/后序序列,求层序序列
算法原理
没有什么好说的,因为是完全二叉树,所以可以由根节点直接找到孩子节点
如果根节点root是从0开始,那么左孩子就是root*2+1
右孩子就是root*2+2
如果根节点root是从1开始,那么左孩子就是root*2
右孩子就是root*2+1
因为是完全二叉树,也不是特别担心超限的问题
还有一种特殊情况就是给你一个CST(完全BST)树的每个节点的值,让你求层序遍历的结果,这种题就可以吧给出的节点从小到大排序,排序完成后的序列就是中序序列,然后按照上面的方法递归就可以了
核心代码实现
int t=0; //代表先序/中序/后序序列走到那个位置了
void inOrder(int root){
if(root>=n) return ; //超过范围
//level[root]=pre[t++]; 如果是先序序列在这个位置
inOrder(root*2+1); //递归左子树
//level[root]=in[t++]; 如果是中序序列在这个位置
inOrder(root*2+2); //递归右子树
//level[root]=post[t++]; 如果是后序序列在这个位置
}
例题
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)