数据结构-树

文章介绍了二叉树的基本概念,包括二叉树、完全二叉树和满二叉树的定义。讨论了二叉树的存储方式,如数组和结构体表示,并展示了如何新建节点、插入子节点。此外,还详细阐述了二叉树的四种遍历方法:前序、中序、后序和层序遍历。
摘要由CSDN通过智能技术生成

二叉树

1概念:对于每一个节点,拥有的子节点个数称之为这个结点的度, 所有节点的度不超过2的树称之为二叉树 2:每个节点最多只有两个子节点,它的子节点一般称之为左右孩子, 3:具有相同节点深度的二叉树节点位于同一层

完全二叉树:除了最后一层外其他层的节点个数全满,而且最后一层从左到右排满直到最后一个节点,

也就是说按照层序遍历依次数是没有缺口的

满二叉树:所有层节点全满

完全二叉树的存储

1用数组存储

可以以 [0]||[1]来作为根节点建立二叉树,数组[t]的左右孩子位置分别为[2t]与[2t+1],父亲节点为[t/2]

2用结构体存储

1:struct TreeNode{
    int value;
    int lchild,rchild,father
    TreeNode(int x){
        value=x;
    }
};
//用数组来表示
2:struct TreeNode{
    int value;
    TreeNode *lchild,*rchild,*father
         TreeNode(int x){
        value=x;
    }
};
// TreeNode(int x)--获得结构体实例也可以使用类似于 类中构造函数的方法

二叉树的操作

1新建节点:TreeNode *p=new TreeNode(x); 2插入子节点:

void insert(TreeNode *fa,TreeNode *p,int flag){
    if(!flag)
        fa->lchild=p;
    else
        fa->rchild=p;
    p->father=father;
}
//调用-
Tree *p=new TreeNode(value);
insert(fa,p,flag);

二叉树的遍历

1:前序遍历

void PreOrder(TreeNode*p){
    cout<<p->value<<'\n';
    if(p->lchild) PreOrder(p->lchild);
    if(p->rchild) PreOrder(p->rchild);
}

2:中序遍历

void InOrder(TreeNode*p){
    if(p->lchild) InOrder(p->lchild);
    cout<<p->value<<'\n';
    if(p->rchild) InOrder(p->rchild);
}

3:后序遍历

void PostOrder(TreeNode*p){
    if(p->lchild) PostOrder(p->lchild);
    if(p->rchild) PostOrder(p->rchild);
    cout<<p->value<<'\n';
}

4:层序遍历-利用队列与bfs思想

TreeNode *q[maxn];
void bfs(TreeNode *root)
{
    int front=1,read=1;
    q[1]=root;
    while(front<=rear)
    {
        TreeNode *p=q[front];
        front++;
        cout<<p->value<<'\n';
        if(p->lchild) q[++rear]=p->lchild;
        if(p->rchild) q[++read]=p->rchild;
    }
}

5:计算树的深度方法

只需在遍历的过程中,该数的深度+=max(lchild,rchild);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值