中序遍历+建树


题目:

给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。

     

分析:中序遍历后进行建树

 方法一:递归中序遍历结果存到向量中,再根据向量中的值进行建树

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;
    }

方法二:在非递归中序遍历中插入建树的代码,省去向量的使用。

相关