1. 程式人生 > >LC 897. Increasing Order Search Tree

LC 897. Increasing Order Search Tree

1.題目

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.

2.解題思路

實際上就是一箇中序遍歷

3.程式碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void TraversalTree(TreeNode* root, vector<int>& v) {
        if(root==NULL) return;
        else {
            TraversalTree(root->left, v);
            v.push_back(root->val);
            TraversalTree(root->right, v);
        }
    }

    
    TreeNode* increasingBST(TreeNode* root) {
        vector<int> v;
        TraversalTree(root, v);
        if (v.size()!=0) {
            TreeNode* newroot = new TreeNode(v[0]);
            TreeNode* cur = newroot, *next=NULL;
            for (int i=1; i<v.size(); i++) {
                TreeNode* temp = new TreeNode(v[i]);
                cur->right = temp;
                cur = cur->right;
            }
            return newroot;  
        }
        else {
            TreeNode* newroot=NULL;
            return newroot;
        }
    }
};