当前位置: 首页 > news >正文

[leetcode]树的操作

一.定义二叉树的结构

// 定义二叉树结构
typedef struct node {
    char ch;
    node* LChild;
    node* RChild;
} TiTNode, * BiTree;

二.创建BiTree

// 创建BiTree
void createTree(BiTree& bt) {
    char ch;
    cin >> ch;
    if (ch == '#') {
        bt = NULL;
    }
    else {
        bt = new node;
        bt->ch = ch;
        createTree(bt->LChild);
        createTree(bt->RChild);
    }
}

三.访问节点数据

// 访问节点数据
void visit(char ch) {
    cout << ch << " ";
}

四.先序遍历

// 先序遍历
void PreOrder(BiTree root) {
    if (root != NULL) {
        visit(root->ch);
        PreOrder(root->LChild);
        PreOrder(root->RChild);
    }
}

五. 中序遍历

// 中序遍历
void InOrder(BiTree root) {
    if (root != NULL) {
        InOrder(root->LChild);
        visit(root->ch);
        InOrder(root->RChild);
    }
}

六.后序遍历

// 后序遍历
void PostOrder(BiTree root) {
    if (root != NULL) {
        PostOrder(root->LChild);
        PostOrder(root->RChild);
        visit(root->ch);
    }
}

七.后序遍历求二叉树的高度

// 后序遍历求二叉树的高度
int PostTreeDepth(BiTree bt) {
    if (bt == NULL) {
        return 0;
    }
    int hl = PostTreeDepth(bt->LChild);
    int hr = PostTreeDepth(bt->RChild);
    return (hl > hr ? hl : hr) + 1;
}

八.先序遍历求二叉树的高度

// 先序遍历求二叉树的高度
int PreTreeDepth(BiTree bt) {
    if (bt == NULL) {
        return 0;
    }
    int hl = PreTreeDepth(bt->LChild);
    int hr = PreTreeDepth(bt->RChild);
    return (hl > hr ? hl : hr) + 1;
}

九.计算二叉树的叶子节点的个数

//计算二叉树的叶子节点的个数
void caculateLeaves(BiTree bt,int* leaf)
{
    if (bt != NULL)
    {
        if (bt->LChild == NULL && bt->RChild == NULL)
        {
            (*leaf)++;
        }
        caculateLeaves(bt->LChild, leaf);
        caculateLeaves(bt->RChild, leaf);
    }
    else
    {
        return;
    }
}

Coding:

#include <iostream>
using namespace std;

// 定义二叉树结构
typedef struct node {
    char ch;
    node* LChild;
    node* RChild;
} TiTNode, * BiTree;

// 创建BiTree
void createTree(BiTree& bt) {
    char ch;
    cin >> ch;
    if (ch == '#') {
        bt = NULL;
    }
    else {
        bt = new node;
        bt->ch = ch;
        createTree(bt->LChild);
        createTree(bt->RChild);
    }
}

// 访问节点数据
void visit(char ch) {
    cout << ch << " ";
}

// 先序遍历
void PreOrder(BiTree root) {
    if (root != NULL) {
        visit(root->ch);
        PreOrder(root->LChild);
        PreOrder(root->RChild);
    }
}

// 中序遍历
void InOrder(BiTree root) {
    if (root != NULL) {
        InOrder(root->LChild);
        visit(root->ch);
        InOrder(root->RChild);
    }
}

// 后序遍历
void PostOrder(BiTree root) {
    if (root != NULL) {
        PostOrder(root->LChild);
        PostOrder(root->RChild);
        visit(root->ch);
    }
}

// 后序遍历求二叉树的高度
int PostTreeDepth(BiTree bt) {
    if (bt == NULL) {
        return 0;
    }
    int hl = PostTreeDepth(bt->LChild);
    int hr = PostTreeDepth(bt->RChild);
    return (hl > hr ? hl : hr) + 1;
}

// 先序遍历求二叉树的高度
int PreTreeDepth(BiTree bt) {
    if (bt == NULL) {
        return 0;
    }
    int hl = PreTreeDepth(bt->LChild);
    int hr = PreTreeDepth(bt->RChild);
    return (hl > hr ? hl : hr) + 1;
}

//计算二叉树的叶子节点的个数
void caculateLeaves(BiTree bt,int* leaf)
{
    if (bt != NULL)
    {
        if (bt->LChild == NULL && bt->RChild == NULL)
        {
            (*leaf)++;
        }
        caculateLeaves(bt->LChild, leaf);
        caculateLeaves(bt->RChild, leaf);
    }
    else
    {
        return;
    }
}

int main() {
    // 示例输入:ABD##E##CF###
    BiTree root = NULL;
    cout << "Enter the tree structure (use # for null nodes): ";
    createTree(root);

    cout << "PreOrder: ";
    PreOrder(root);
    cout << endl;

    cout << "InOrder: ";
    InOrder(root);
    cout << endl;

    cout << "PostOrder: ";
    PostOrder(root);
    cout << endl;

    int height = PostTreeDepth(root);
    cout << "The height of the tree (PostOrder): " << height << endl;

    height = PreTreeDepth(root);
    cout << "The height of the tree (PreOrder): " << height << endl;

    int leaf = 0;
    caculateLeaves(root,&leaf);
    cout << "The number of leaves is : " << leaf << endl;

    return 0;
}

相关文章:

  • Java中的不可变集合
  • RAG 优化:高效解析并接入图文、表格密集型文档
  • Redis - 概述
  • Spring框架如何做EhCache缓存?
  • 2025图像处理和深度学习国际学术会议(IPDL 2025)
  • 国产密码算法介绍 SM2/SM3/SM4/SM9/祖冲之ZUC
  • 优选算法的巧思之径:模拟专题
  • 针对 Maven 管理的SSM项目编写Ant 的 `build.xml` 模板,支持依赖管理、编译、打包 WAR 文件及部署到 Tomcat。
  • AI训练师入行指南(四):模型训练
  • MySQL基础语法DCL字符串函数
  • 检测无后缀名的文件类型
  • 《筋斗云的K8s容器化迁移》
  • Linux孤儿进程和僵尸进程
  • 谈谈常见的数据结构(如数组、链表、栈、队列、哈希表、树、图)及其应用场景
  • OpenHarmony v4.1 Release设置应用随系统自动启动
  • Sa-Token核心功能解剖三(OAuth2.0认证、分布式会话、参数签名 )
  • Transformers without Normalization paper笔记
  • Android OpenGLES 360全景图片渲染(球体内部)
  • wsl2的centos7安装jdk17、maven
  • 欧拉公式和sin cos
  • 济南哪家公司做网站好/企业邮箱入口
  • 电脑当服务器做网站/百度电话客服24小时
  • bootstrap响应式网站/知名品牌营销案例100例
  • 武汉公司建站/推广游戏赚钱的平台
  • wordpress判断子分类/南宁seo推广公司
  • 旅游网站模板设计/邀请推广app