今天前面碰到一题,判定给定的BST是否是合法的,因为BST性质,LDR遍历递增,根据这个来判定即可。但是碰到给定自行构建BST的时候,给定的输入是这样的:
5 1
5 2 3
1 0 0
3 4 5
4 0 0
6 0 0
什么意思呢,第一行为n和root,分别代表总共n个节点,并且root节点为序号root的节点。
之后每一行输入的是三个数,分别为val,left_idx,right_idx来进行链接关系,如果碰到idx=0的,说明子节点为空
想了蛮久到底怎么样去构建这棵树比较好,感觉还是总结一下吧
#include <bits/stdc++.h>
using namespace std;
struct TreeNode{ //定义树节点
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x):val(x),left(NULL),right(NULL){}
};
void LDR(TreeNode* root,vector<int>& res){
if(!root){
return;
}
LDR(root->left,res);
res.push_back(root->val);
LDR(root->right,res);
return;
}
int main(){
int n,root_idx; //总共n个点
cin>>n>>root_idx;
int val,l