题目描述

 已知完全二叉树的先序/中序/后序序列,求层序序列

算法原理

 没有什么好说的,因为是完全二叉树,所以可以由根节点直接找到孩子节点

        如果根节点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++];      如果是后序序列在这个位置
}

例题

 PAT甲:    1064 Complete Binary Search Tree (中序转层序)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐