实现二叉树(#为补全的空结点)的基本操作,包括树的创建和输出,求叶子结点数目和深度。
C++实现二叉树(#为补全的空结点)的基本操作,包括树的创建和输出,求叶子结点数目和深度。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注 答案引用自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
来表示二叉树的节点,每个节点包含一个值和两个指向左右子节点的指针。然后我们定义了四个函数来实现二叉树的基本操作:创建二叉树、输出二叉树、求二叉树的叶子节点数目和求二叉树的深度。在主函数中,我们创建了一个二叉树,并调用这四个函数来进行操作。解决 无用评论 打赏 举报
悬赏问题
- ¥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,可付费