【二叉树(数据结构)】三种遍历方式,递归求得叶子结点数、结点数、树高度和求第一条最长路径

本文介绍了如何使用C++构建二叉树,并通过先序、中序、后序遍历输出节点。同时,利用递归方法计算了叶子节点数、总节点数以及求解了第一条最长路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【二叉树】数据结构中二叉树的构造、先序遍历、后序遍历、中序遍历,递归求得叶子结点数,求树高度、求第一条最长路径

功能介绍

1、C++实现了对二叉树的构造
2、用先序遍历、中序遍历、后序遍历输出二叉树结点
3、递归求得叶子结点数、结点数
4、求第一条最长路径

完整代码

#include<iostream>
#include<stack>
using namespace std;

struct TreeNode {
   
   
    int Data;
    struct TreeNode* Left;
    struct TreeNode* Right;
};
class Tree {
   
   
private:
    TreeNode* tree=new TreeNode;
    void CreatUTree(TreeNode*& tree, int* str, int& n) {
   
   //创建二叉树
        int data = str[n++];
        if (data > 0 || data == 0) {
   
   
            if (data == 0)tree = NULL;
            else {
   
   
                tree = new TreeNode;
                if (!tree) {
   
   
                    cout << "空间申请失败!" << endl;
                    exit(-1);
                }
                tree->Data = data;
                CreatUTree(tree->Left, str, n);
                CreatUTree(tree->Right, str, n);
            }
        }
        else {
   
   
            tree = NULL;
        }
    }
    void PreOrder(TreeNode* tree)
    {
   
   //先续遍历
        if (tree)
        {
   
   
            printf("%d ", tree->Data);
            PreOrder(tree->Left);
            PreOrder(tree->Right);
        }
    }
    void InOrder(TreeNode* tree)
    {
   
   //中序遍历
        if (tree)
        {
   
   
            InOrder(tree->Left);
            printf("%d ", tree->Data);
            InOrder(tree->Right);
        }

    }
    void PostOrder(TreeNode* tree)
    {
   
   //后续遍历
        if (tree)
        {
   
   
            PostOrder(tree->Left);
            PostOrder(tree->Right);
            printf("%d ", tree->Data);
        }
    
### 回答1: 根据二叉树的性质,叶子节点个数为数为2的节点个数加1。又因为二叉树中每个节点数不超过2,所以数为1的节点个数为叶子节点个数加1。所以可以得到叶子节点个数为叶子节点个数=(数为2的节点个数+1)/2,又因为完美二叉树每个节点的数都是2,所以叶子节点个数为2^(层数-1),可以根据此计算二叉树叶子节点个数。二叉树的宽为每层节点个数的最大值,也可以根据层数计算得出。 ### 回答2: 二叉树中的点个数: 二叉树中的点个数可以通过遍历二叉树来实现。先遍历左子树,再遍历右子树,最后加上根节点,这样就可以得到整个二叉树点个数。 二叉树中的叶子结点个数: 二叉树中的叶子结点是指没有子节点的点。可以通过遍历整个二叉树,统计叶子结点的个数。对于每个点,如果该点没有左右子树,则它是个叶子结点。把叶子结点的个数累加起来即可得到二叉树叶子结点的个数。 某点层次: 在二叉树中,从根节点开始一层一层往下走,可以得到每个点所处的层次。根节点的层次为1,它的子节点层次为2,依此类推。可以通过递归遍历整个二叉树,找到目标点所处的层次。 二叉树二叉树可以定义为二叉树中任意一层中点数的最大值。可以通过递归遍历整个二叉树,记录每一层的点个数,然后找到最大值即可。如果遍历时记录每个点的层次信息,就可以避免重复计算。 ### 回答3: 二叉树是一种重要的数据结构二叉树中的点个数、叶子结点个数、某点层次二叉树二叉树操作中比较基础的操作。下面分别进行讲解: 1. 二叉树中的点个数 二叉树点的个数可以通过遍历二叉树求得,常用的遍历方式有前序遍历、中序遍历后序遍历。其中,前序遍历遍历顺序是先访问根节点,然后访问左子树,最后访问右子树;中序遍历遍历顺序是先访问左子树,然后访问根节点,最后访问右子树;后序遍历遍历顺序是先访问左子树,然后访问右子树,最后访问根节点。无论采用哪种方式,从根节点开始,通过递归或非递归方式遍历所有点并累加即可得到二叉树中的点个数。 2. 二叉树中的叶子结点个数 二叉树中的叶子结点是指没有子节点的点,同样可以通过遍历二叉树求得。从根节点开始,递归或非递归地访问所有点,如果当前点是叶子结点,则累加;否则继续访问其左子树右子树,直到访问完整个二叉树。 3. 某点层次 某点的层次是指从根节点到该点的路径中经过的边数,即该点在树中的深。从根节点开始,递归或非递归遍历二叉树,当访问到目标点时,记录下该点经过的边数即可得到该点的层次。 4. 二叉树 二叉树的宽是指二叉树中某一层的点数的最大值。通过层次遍历二叉树,记录下每一层的点数,然后取最大值即可得到二叉树的宽。 综上所述,通过遍历二叉树可以求得二叉树中的点个数、叶子结点个数、某点层次二叉树。这些操作是二叉树相关算法中最基础的操作,也是设计其他高级算法的前提。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值