数据结构—基础知识(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)
}
相关推荐
呆呆的小鳄鱼3 分钟前
cin,cin.get()等异同点[面试题系列]
java·算法·面试
Touper.17 分钟前
JavaSE -- 泛型详细介绍
java·开发语言·算法
sun00770020 分钟前
std::forward作用
开发语言·c++·算法
JoernLee38 分钟前
机器学习算法:支持向量机SVM
人工智能·算法·机器学习
V我五十买鸡腿1 小时前
顺序栈和链式栈
c语言·数据结构·笔记·算法
我爱一条柴ya1 小时前
【AI大模型】线性回归:经典算法的深度解析与实战指南
人工智能·python·算法·ai·ai编程
七灵微2 小时前
数据结构实验习题
数据结构
麟城Lincoln2 小时前
【RHCSA-Linux考试题目笔记(自用)】servera的题目
linux·笔记·考试·rhcsa
丰锋ff2 小时前
计网学习笔记第2章 物理层(灰灰题库)
笔记·学习
三维重建-光栅投影3 小时前
VS中将cuda项目编译为DLL并调用
算法