453.ツリーをチェーンテーブルに分解する

1178 ワード

タイトル:1本の二叉木を前の順序で に分解します.偽チェーンテーブルとは,二叉木のrightポインタでチェーンテーブル中のnextポインタを表す.
サンプル:
              1
               \
     1          2
    / \          \
   2   5    =>    3
  / \   \          \
 3   4   6          4
                     \
                      5
                       \
                        6

コード:
class Solution {
public:
    /**
     * @param root: a TreeNode, the root of the binary tree
     * @return: nothing
     */
    void flatten(TreeNode *root) {
        // write your code here
        if(root == NULL)  
            return;  
        while(root)  
        {  
            TreeNode *pre = root->left;  
            if(pre)  
            {  
                while(pre->right)  
                    pre = pre->right;  
                pre->right = root->right;  
                root->right = root->left;  
                root->left = NULL;  
            }  
            root = root->right;  
        }  
    }
};

感想:この問題は、二叉樹を前順に遍歴する形で、根の左子樹に右子樹の節点が含まれている右子樹を取り外し、左子樹を根の右子樹に変えて、右子樹を後ろにつなぎ、この方法で後ろに根をつないだ右子樹を分割したチェーンです.最後にルートの左サブツリーをNULLにします.