如何使用顺序存储结构和二叉链表数据结构来实现二叉树的深度计算以及中序遍历?请提供相应的C++或Java代码示例,并解释关键步骤。
时间: 2024-11-27 16:19:39 浏览: 54
使用顺序存储结构和二叉链表数据结构来实现二叉树的深度计算及中序遍历,我们可以分别创建一个节点类,然后根据存储方式编写相应的算法。
### 顺序存储(数组表示法):
```cpp
#include <iostream>
// 定义二叉树节点
struct TreeNode {
int val;
int left, right; // 子节点位置
};
// 计算深度(递归)
int maxDepth(TreeNode* root, int depth = 0) {
if (root == nullptr) return depth;
return std::max(maxDepth(root->left, depth + 1), maxDepth(root->right, depth + 1));
}
// 中序遍历(递归)
void inorderTraversal(TreeNode* root) {
if (root != nullptr) {
inorderTraversal(root->left);
std::cout << root->val << " ";
inorderTraversal(root->right);
}
}
int main() {
// 创建二叉树节点并填充数据
TreeNode tree[] = {1, 2, 3, nullptr, 4, nullptr, 5};
int n = sizeof(tree) / sizeof(tree[0]);
// 初始化根节点
TreeNode* root = tree[0];
int tree_depth = maxDepth(root);
std::cout << "Tree depth: " << tree_depth << "\n";
inorderTraversal(root); // 中序遍历
std::cout << "\n";
return 0;
}
```
### 二叉链表存储(每个节点包含左右子节点指针):
```cpp
#include <iostream>
using namespace std;
class Node {
public:
int val;
Node* left, *right;
};
// 计算深度(迭代)
int maxDepth(Node* root) {
if (root == nullptr) return 0;
int depth = 0;
Node* curr = root;
while (curr != nullptr) {
depth++;
curr = curr->left ? curr->left : curr->right;
}
return depth;
}
// 中序遍历(递归或迭代,这里以递归为例)
void inorderTraversal(Node* root) {
if (root != nullptr) {
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
}
int main() {
// 创建二叉树节点并填充数据
Node* root = new Node{1, nullptr, nullptr}; // 根节点
root->left = new Node{2, nullptr, nullptr}; // 左子树
root->right = new Node{3, nullptr, nullptr}; // 右子树
// 中序遍历
inorderTraversal(root);
cout << endl;
// 深度计算
int tree_depth = maxDepth(root);
cout << "Tree depth: " << tree_depth << endl;
// 清理内存
delete root->left;
delete root->right;
delete root;
return 0;
}
```
注意,以上代码示例均采用了C++语言,你需要根据实际需求调整代码适应Java或者其他语言。关键步骤包括:创建节点,设置连接,计算深度(递归或迭代),以及进行中序遍历。
阅读全文
相关推荐




















