已知前序遍历和中序遍历如何构造二叉树
设有前序遍历(根->左->右):3,9,20,15,7
中序遍历(左->根->右):9, 3, 15, 20, 7
算法设计
1. 前序遍历的第一点为根节点
2. 在中序遍历中,根节点的左边为其左子树,右边为其右子树
根据以上特性,设置算法流程如下:
- 确认当前节点、左子树、右子树
- 在左子树中递归
- 在右子树中递归
功能代码及测试代码
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode() : val(0), left(nullptr), right(nullptr) {
}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {
}
TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {
}
};
class Solution {
public:
/**
* @Method: buildTreeUntil
* @FullName: Solution::buildTreeUntil
* @Access: public
* @Returns: TreeNode*
* @Qualifier:
* @Parameter: int preorderLeft 前序遍历左边界
* @Parameter: int preorderRight 前序遍历右边界