【算法】完全二叉树的层序遍历

题目描述

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

算法原理

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

        如果根节点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 (中序转层序)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值