数据结构—基础知识(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)
}
相关推荐
尽兴-13 分钟前
2.1 向量基础:Embedding、余弦相似度、欧氏距离、向量检索
算法·embedding·欧氏距离·向量检索·余弦相似度
Black蜡笔小新29 分钟前
自动化AI算法训练服务器DLTM训推一体工作站赋能多行业智能化升级
人工智能·算法·自动化
怪兽学LLM1 小时前
LeetCode 438 找到字符串中所有字母异位词(Python 固定滑动窗口+字符计数解法)
python·算法·leetcode
卡梅德生物科技小能手1 小时前
卡梅德生物科普:MAPT(微管相关蛋白Tau)
人工智能·经验分享·机器学习
满怀冰雪1 小时前
第04篇-双指针算法-从有序数组到回文判断的高频解法
java·算法
CC数学建模1 小时前
2026年江西省研究生数学建模竞赛1题:空间数据分析中的过拟合识别完整思路、代码、模型、文章,全网首发高质量分享!
python·算法·数学建模
leo__5201 小时前
MATLAB实现牧羊人算法
开发语言·算法·matlab
Gauss松鼠会1 小时前
【GaussDB】GaussDB SMP特性调优详解
java·服务器·前端·数据库·sql·算法·gaussdb
Tisfy1 小时前
LeetCode 3689.最大子数组总值 I:What The Medium
算法·leetcode·题解·贪心·模拟·脑筋急转弯
葬送的代码人生1 小时前
JavaScript 数组完全指南:从入门到实战
前端·javascript·算法