1. 程式人生 > >【LeetCode】68. Flatten Binary Tree to Linked List

【LeetCode】68. Flatten Binary Tree to Linked List

題目描述(Medium)

Given a binary tree, flatten it to a linked list in-place.

題目連結

Example 1:

For example, given the following tree:

    1    / \   2   5  / \   \ 3   4   6

The flattened tree should look like:

1  \   2    \     3      \       4        \         5

演算法分析

中序遍歷棧方法。

提交程式碼:

/**
 * 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 flatten(TreeNode* root) {
        if (!root) return;
        stack<TreeNode*> s;
        s.push(root);
        
        while(!s.empty())
        {
            TreeNode* node = s.top();
            s.pop();
            
            if (node->right) s.push(node->right);
            if (node->left) s.push(node->left);
            
            node->left = NULL;
            if(!s.empty())
                node->right = s.top();
        }
    }
};