数据结构—基础知识(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)
}
相关推荐
三毛的二哥2 小时前
BEV:典型BEV算法总结
人工智能·算法·计算机视觉·3d
南宫萧幕3 小时前
自控PID+MATLAB仿真+混动P0/P1/P2/P3/P4构型
算法·机器学习·matlab·simulink·控制·pid
handler014 小时前
Linux: 基本指令知识点(2)
linux·服务器·c语言·c++·笔记·学习
故事和你914 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论
我叫黑大帅4 小时前
为什么map查找时间复杂度是O(1)?
后端·算法·面试
炽烈小老头4 小时前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积
学习·算法
唐山大方汇中仪表5 小时前
自动化炼钢核心——副枪探头
经验分享
skilllite作者5 小时前
AI agent 的 Assistant Auto LLM Routing 规划的思考
网络·人工智能·算法·rust·openclaw·agentskills
M ? A5 小时前
Vue 动态组件在 React 中,VuReact 会如何实现?
前端·javascript·vue.js·经验分享·react.js·面试·vureact
破浪前行·吴6 小时前
数据结构概述
数据结构·学习