数据结构—基础知识(12):二叉树算法补充

数据结构---基础知识(12):二叉树算法补充

复制二叉树

【算法步骤】

如果是空树,递归结束,否则进行以下操作:

  • 申请一个新结点空间,复制根结点;
  • 递归复制左子树;
  • 递归复制右子树。
c 复制代码
void Copy(BiTree T,BiTree &NewT)
{//复制一棵和T完全相同的二叉树
    if(T==NULL)//如果是空树,递归结束
    {
        NewT=NULL;
        return;
    }
    else
    {
        NewT=new BiTNode;
        NewT->data=T->data;//复制根结点
        Copy(T->lchild,NewT->lchild);//递归复制左子树
        Copy(T->rchild,NewT->rchild);//递归复制右子树     
    }//else
}

计算二叉树的深度

【算法步骤】

如果是空树,递归结束,深度为0,否则进行以下操作:

  • 递归计算左子树的深度记为m;
  • 递归计算右子树的深度记为n;
  • 如果m大于n,二叉树的深度为m+1,否则为n+1
c 复制代码
int Depth(BiTree T)
{//计算二叉树T的深度
    if(T==NULL) return 0;//如果是空树,深度为0,递归结束
    else
    {
        m=Depth(T->lchild);//递归计算左子树的深度记为m
        n=Depth(T->rchild);//递归计算右子树的深度记为n
        if(m>n) return(m+1);//二叉树的深度为m与n的较大者加1
        else return(n+1)
    }
}

统计二叉树中结点的个数

c 复制代码
int NodeCount(BiTree T)
{//统计二叉树T中结点的个数
  if(T==NULL) return 0;//如果是空树,则结点个数为0,递归结束
    else return NodeCount(T->lchild)+NodeCount(T->rchild)+1
        //否则结点个数为左子树的结点个数+右子树的结点个数+1
}

统计二叉树叶子结点个数

c 复制代码
int LeafNode(BiTree T)
{//统计二叉树T中叶子结点的个数
    if(T==NULL)
        return 0;//空树,返回0
    else if(T->lchild==NULL&&T->rchild==NULL)
        return 1;//叶子结点,返回1
    else//递归
        return LeafNode(T->lchild)+LeafNode(T->rchild)
}
相关推荐
Answer1st43 分钟前
【嵌入式模块】UART通信模块
笔记
和侧1 小时前
离子注入后为什么必须配套退火工艺?
笔记·学习
生态学者2 小时前
Global Change Biology | 森林越“步调一致”,反而越怕干旱?树木生长与叶片活动的同步之谜
大数据·人工智能·算法·r语言·微信公众平台
lsswear2 小时前
Agent 框架新手入门与实战部署指南
大数据·人工智能·算法
学逆向的2 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
Data analyse4564 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
TheBlackHoleLab5 小时前
【Vulnhub系列】DarkHole1: 渗透测试笔记,没有踩渗透的坑,却踩到了虚拟机平台的坑,人生处处是大坑
笔记·vulnhub·easy·darkhole1
Navigator_Z5 小时前
LeetCode //C - 1293. Shortest Path in a Grid with Obstacles Elimination
c语言·算法·leetcode
ACP广源盛139246256735 小时前
硬件选型笔记:GSV2231@ACP,DP1.4 MST 一进三出多屏扩展方案评估
笔记·硬件架构·视频·mst·国产芯片
每天get到一点新知识6 小时前
7款电脑数据恢复软件集合!恢复硬盘数据,其实很简单!
经验分享·电脑·数据恢复·电脑知识·电脑小技巧