二叉树及其三种遍历

本文详细介绍了二叉树的性质,包括满二叉树和完全二叉树的定义,以及二叉树的节点数量与深度的关系。重点讨论了二叉树的循环递归规律,通过一个具体的UVA679小球下落问题展示了如何应用这些规律。此外,文章还阐述了二叉树的三种遍历方法——前序、中序和后序遍历,并提供了不同的实现方式,包括数组和结构体指针。最后,通过一个层次遍历的例子解释了如何遍历二叉树并输出节点权值。
摘要由CSDN通过智能技术生成

1.二叉树的常用性质

<1>.在二叉树的第i层上最多有2 i-1 个节点 。(i>=1)

<2>.二叉树中如果深度为k(有k层),那么最多有2k-1个节点。(k>=1)

<3>.若二叉树按照从上到下从左到右依次编号,则若某节点编号为k,则其左右子树根节点编号分别为2k和2k+1;

<4>.二叉树分类:满二叉树,完全二叉树

满二叉树:高度为h,由2^h-1个节点构成的二叉树称为满二叉树。

<5>.在完全二叉树中,具有n个节点的完全二叉树的深度为[log2n]+1,其中[log2n]+1是向下取整。满二叉树的深度为k=log2(n+1);

2.二叉树的循环递归规律法

例题:uva679小球下落

题意:有一颗满二叉树,每个节点是一个开关,初始全是关闭的,小球从顶点落下,

小球每次经过开关就会把它的状态置反,这个开关为关时,小球左跑,为开时右跑。现在问第k个球下落到d层时的开关编号。输入深度d和小球个数k。d<20,k<524288

<1>.首先对于每一层,第奇数个落入该层的球都是往左走的,第偶数个落入该层的球都是往右走的。

<2>.因为小球都是按照编号依次下落的,对于左枝(也就是奇数球),每个I号小球落入该层都是第(I+1)/2个小球。而偶数是往右走的I/2个小球!

<3>.因此每一层循环递归,来判断i,循环d层,即可找出最后叶子!省去大数组和大时间

代码:

#include
#include
using namespace std;
int main()
{
int n;
while(cin>>n)
{
if(n==-1)break;
int D,I;
while(n–)
{
cin>>D>>I;//D层I个小球
int k=1;
for(int i=0; i<D-1; i++)
{
if(I%2)//奇数是往左走的第(i+1)/2个小球
{
k=k2;//往左走是k2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值