使用c++实现中序和后序遍历算法,求节点的个数,叶子结点的个数及数的深度。
时间: 2024-11-24 11:43:50 浏览: 5
在C++中,实现二叉树的中序遍历、后序遍历以及计算节点个数、叶子结点个数和深度,通常会涉及到递归或者迭代的方式。下面是一个基本的示例,假设我们有一个名为`TreeNode`的简单二叉树节点结构:
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 中序遍历(根-左-右)
void inorderTraversal(TreeNode* root, vector<int>& result) {
if (root) {
inorderTraversal(root->left, result);
result.push_back(root->val);
inorderTraversal(root->right, result);
}
}
// 后序遍历(左-右-根)
void postorderTraversal(TreeNode* root, vector<int>& result) {
if (root) {
postorderTraversal(root->left, result);
postorderTraversal(root->right, result);
result.push_back(root->val);
}
}
int countNodes(TreeNode* root) {
return (root == nullptr) ? 0 : 1 + countNodes(root->left) + countNodes(root->right);
}
int countLeaves(TreeNode* root) {
return (root == nullptr || root->left == nullptr && root->right == nullptr) ? 1 : 0;
}
int treeDepth(TreeNode* root) {
if (root == nullptr) return 0;
int leftDepth = treeDepth(root->left);
int rightDepth = treeDepth(root->right);
return max(leftDepth, rightDepth) + 1;
}
```
这里我们首先定义了`inorderTraversal`和`postorderTraversal`函数来实现遍历,然后`countNodes`用于计算节点总数,`countLeaves`用于计算叶节点数,`treeDepth`用于计算树的最大深度。
阅读全文