weixin_58835589 2023-12-08 20:24 采纳率: 0%
浏览 11

C++实现二叉树(#为补全的空结点)的基本操作,包括树的创建和输出,求叶子结点数目和深度。

实现二叉树(#为补全的空结点)的基本操作,包括树的创建和输出,求叶子结点数目和深度。

img

  • 写回答

2条回答 默认 最新

  • DTcode7 前端领域优质创作者 2024-06-03 21:24
    关注

    答案引用自chatgpt生成,望对题主有所帮助/启发;若有帮助,还望采纳!

    在C++中,我们可以使用结构体来定义二叉树的节点,然后通过指针来连接这些节点,形成一棵二叉树。以下是一个简单的实现:

    #include<iostream>
    using namespace std;
    
    // 定义二叉树节点
    struct TreeNode {
        int val;
        TreeNode *left;
        TreeNode *right;
        TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };
    
    // 创建二叉树
    TreeNode* createTree(int arr[], int n, int i) {
        if(i >= n || arr[i] == -1) {
            return NULL;
        }
        TreeNode* node = new TreeNode(arr[i]);
        node->left = createTree(arr, n, 2*i+1);
        node->right = createTree(arr, n, 2*i+2);
        return node;
    }
    
    // 输出二叉树
    void printTree(TreeNode* root) {
        if(root == NULL) {
            return;
        }
        cout << root->val << " ";
        printTree(root->left);
        printTree(root->right);
    }
    
    // 求二叉树的叶子节点数目
    int countLeaves(TreeNode* root) {
        if(root == NULL) {
            return 0;
        }
        if(root->left == NULL && root->right == NULL) {
            return 1;
        }
        return countLeaves(root->left) + countLeaves(root->right);
    }
    
    // 求二叉树的深度
    int depth(TreeNode* root) {
        if(root == NULL) {
            return 0;
        }
        int leftDepth = depth(root->left);
        int rightDepth = depth(root->right);
        return max(leftDepth, rightDepth) + 1;
    }
    
    int main() {
        int arr[] = {1, 2, 3, -1, 4, 5, 6};
        int n = sizeof(arr)/sizeof(arr[0]);
        TreeNode* root = createTree(arr, n, 0);
        printTree(root);
        cout << endl;
        cout << "Number of leaves: " << countLeaves(root) << endl;
        cout << "Depth of tree: " << depth(root) << endl;
        return 0;
    }
    

    在这个代码中,我们首先定义了一个结构体TreeNode来表示二叉树的节点,每个节点包含一个值和两个指向左右子节点的指针。然后我们定义了四个函数来实现二叉树的基本操作:创建二叉树、输出二叉树、求二叉树的叶子节点数目和求二叉树的深度。在主函数中,我们创建了一个二叉树,并调用这四个函数来进行操作。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月8日

悬赏问题

  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀
  • ¥20 C#上传XML格式数据
  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费