中序遍历+建树
题目:
给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。
分析:中序遍历后进行建树
方法一:递归中序遍历结果存到向量中,再根据向量中的值进行建树
void inorder(TreeNode* root,vector<int> &v){ if(root==NULL) return; inorder(root->left,v); v.push_back(root->val); inorder(root->right,v); } //下面是建树的重点代码 TreeNode* increasingBST(TreeNode* root) { vector<int> v; inorder(root,v); TreeNode* head=new TreeNode(v[0]); TreeNode* p=head; //链接树的结点 for(int i=1;i){ TreeNode* temp=new TreeNode(v[i]); p->right=temp; p->left=NULL; p=temp; } return head; }
方法二:在非递归中序遍历中插入建树的代码,省去向量的使用。