已知二叉树t,分别采用顺序存储结构、二叉链表存储结构实现求二叉树的深度,并对二叉树分别进行中序遍历的代码
时间: 2024-10-31 14:04:34 浏览: 18
在计算机科学中,求解二叉树的深度以及对其进行中序遍历,可以针对两种常见的二叉树数据结构——顺序存储结构和二叉链表存储结构进行。
### 1. 顺序存储结构 (数组实现)
假设二叉树节点存储在一个一维数组`nodes[]`中,根节点在数组的第一个位置,左孩子是下标 *2*i* + 1,右孩子是下标 *2*i* + 2。我们可以通过递归的方式计算深度:
```c++
int binaryTreeDepth(int nodes[], int start, int end) {
if (start > end)
return 0;
else {
int mid = (start + end) / 2;
return 1 + max(binaryTreeDepth(nodes, start, mid - 1), binaryTreeDepth(nodes, mid + 1, end));
}
}
```
然后通过递归遍历进行中序序列:
```c++
void inorderTraversal(int nodes[], int start, int end, vector<int>& res) {
if (start <= end) {
inorderTraversal(nodes, start * 2 + 1, end, res); // 左子树
res.push_back(nodes[start]); // 当前节点
inorderTraversal(nodes, start * 2 + 2, end, res); // 右子树
}
}
```
### 2. 二叉链表存储结构
对于二叉链表,每个节点包含指向左右孩子的指针`left`和`right`。我们可以直接从根节点开始计数深度,并使用迭代方式完成中序遍历:
```c++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int binaryTreeDepth(TreeNode* root) {
if (root == nullptr)
return 0;
else
return 1 + max(binaryTreeDepth(root->left), binaryTreeDepth(root->right));
}
void inorderTraversal(TreeNode* root, vector<int>& res) {
stack<TreeNode*> s;
while (root || !s.empty()) {
while (root) {
s.push(root);
root = root->left;
}
root = s.top();
s.pop();
res.push_back(root->val);
root = root->right;
}
}
```
阅读全文