给出含空结点的前序遍历序求二叉树深度c++
时间: 2025-01-06 07:08:54 浏览: 6
在C++中,给定一个包含空节点的二叉树的前序遍历序列,要计算其深度,你可以使用递归的方法。首先,你需要了解前序遍历的顺序:根节点 -> 左子树 -> 右子树。由于我们从根开始,我们可以利用这个特点来构建二叉树。
这里是一个基本的思路:
1. 定义一个函数`int maxDepth(vector<int>& preorder)`, 接收一个整数数组preorder作为输入,这是前序遍历的结果。
2. 初始化一个变量`depth = 0`来存储当前的最大深度,深度初始为0表示根节点。
3. 遍历数组`preorder`,找到根节点。根节点通常是数组的第一个元素(因为前序遍历先根后叶)。
4. 如果找到了根节点,递归地计算左子树和右子树的深度,分别加1到当前深度(因为每个子树都是更深一层),然后取两者中的较大值加1作为新的最大深度。
5. 返回`depth`作为最终的树的深度。
下面是一个简单的示例代码实现:
```cpp
#include <vector>
using namespace std;
int maxDepth(vector<int>& preorder) {
if (preorder.empty()) return 0;
int root = preorder[0];
// Remove the first element from the preorder as it's the root
preorder.erase(preorder.begin());
int left_depth = maxDepth(preorder);
int right_depth = maxDepth(preorder); // If there are more elements, they belong to right subtree
// Return the maximum depth among the root and subtrees
return max(left_depth, right_depth) + 1;
}
// 示例
int main() {
vector<int> preorder = {1, null, 2, 3, null, null, 4};
// 注意这里null通常表示空节点,在实际应用中需要处理这种情况
int tree_depth = maxDepth(preorder);
cout << "The depth of the binary tree is: " << tree_depth << endl;
return 0;
}
```
阅读全文