数据结构—基础知识(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)
}
相关推荐
岁忧1 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
chao_7891 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
陈洪奇1 小时前
注册中心学习笔记整理
笔记·学习
秋说3 小时前
【PTA数据结构 | C语言版】一元多项式求导
c语言·数据结构·算法
Maybyy3 小时前
力扣61.旋转链表
算法·leetcode·链表
谭林杰4 小时前
B树和B+树
数据结构·b树
兴趣使然_5 小时前
【笔记】使用 html 创建网址快捷方式
笔记·html·js
卡卡卡卡罗特5 小时前
每日mysql
数据结构·算法
chao_7896 小时前
二分查找篇——搜索旋转排序数组【LeetCode】一次二分查找
数据结构·python·算法·leetcode·二分查找
今日热点6 小时前
小程序主体变更全攻略:流程、资料与异常处理方案
经验分享·微信·小程序·企业微信·微信公众平台·微信开放平台