[leetcode-897-Increasing Order Search Tree]

Given a tree, rearrange the tree in in-order so that the leftmost node in the tree is now the root of the tree, and every node has no left child and only 1 right child.

Example 1:
Input: [5,3,6,2,4,null,8,1,null,null,null,7,9]

       5
      / 
    3    6
   /     
  2   4    8
 /        /  
1        7   9

Output: [1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]

 1
  
   2
    
     3
      
       4
        
         5
          
           6
            
             7
              
               8
                
                 9  

Note:

  1. The number of nodes in the given tree will be between 1 and 100.
  2. Each node will have a unique integer value from 0 to 1000.

思路:

最最朴素的思路。。中序遍历然后保存所有结点,最后重新构建二叉树。。

十分不优雅。。。

void inOrder(TreeNode* root,vector<TreeNode*>& t)
{
    if(root == NULL) return;
    inOrder(root->left, t);
    t.push_back(root);
    inOrder(root->right, t);
}

TreeNode* increasingBST(TreeNode* root)
{
   vector<TreeNode*> t;
   inOrder(root,t);
   for(int i = 0; i < t.size(); i++)
   {
       t[i]->left = NULL;
       if(i != t.size() -1){t[i]->right = t[i+1];}
       else{t[i]->right = NULL;}     
   }
   return t[0];
}

优雅版本:

直接操作原来的树。。

TreeNode* increasingBST(TreeNode* root) {
        if (!root)
            return root;
        if (root->left)
        {
            TreeNode* temp=root->left;
            TreeNode* temp2=root->left->right;
            root->left=NULL;
            temp->right=root;
            root->left=temp2;
            return increasingBST(temp);;
        }
        root->right = increasingBST(root->right);
        return root;
        }
原文地址:https://www.cnblogs.com/hellowooorld/p/9758064.html