二叉树知识点

二叉树

一,定义:树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合
二,树具有的特点有:

(1)每个结点有零个或多个子结点

(2)没有父节点的结点称为根节点

(3)每一个非根结点有且只有一个父节点

(4)除了根结点外,每个子结点可以分为多个不相交的子树。

三,树的基本关系:

若一个结点有子树,那么该结点称为子树根的“双亲”,子树的根称为该结点的“孩子”。有相同双亲的结点互为“兄弟”。一个结点的所有子树上的任何结点都是该结点的后裔。从根结点到某个结点的路径上的所有结点都是该结点的祖先。

四,部分术语

叶子:度数为1的节点
层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1
树的高度:树中结点的最大层次
森林:0个或多个不相交的树组成。对森林加上一个根,森林即成为树;删去根,树即成为森林。

二叉树

一,定义

二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。

二,二叉树的性质

性质1:二叉树第i层上的结点数目最多为2i-1(i>=1)

性质2:深度为k的二叉树至多有2k-1个结点(k>=1)

性质3:包含n个结点的二叉树的高度至少为(log2n)+1

性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1

性质5:除最后一层外,其余层数节点数均满足2^n-1

三,数组模拟二叉树储存
一,思路

**
约定1号结点为二叉树的根节点,i结点的左子节点和右子节点的编号分别为2i,2i+1
**

二,代码
#include<cstdio>
#include<iostream>
const int Maxn=1000010;
using namespace std;
int tree[Maxn];
void work(int x){
    if(tree[x]) printf("%d\n",tree[x]);
    if(tree[2*x]) work(2*x);
    if(tree[2*x+1]) work(2*x+1);
}
int main(){
    int n,l,r;
    scanf("%d",&n);
    tree[1]=1;
    for(int i=1;i<=n;i++){
        scanf("%d%d",&l,&r);
        tree[der[i]*2]=l;
        tree[der[i]*2+1]=r;
    }
    work(1);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值