Leetcode 114. Flatten Binary Tree to Linked List

来源:互联网 发布:魔塔盒子获取数据失败 编辑:程序博客网 时间:2024/06/07 18:24

Question

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

For example,
Given

         1        / \       2   5      / \   \     3   4   6

The flattened tree should look like:

   1    \     2      \       3        \         4          \           5            \              6

Code

public void flatten(TreeNode root) {        if (root == null) {            return;        }        TreeNode p = root;        Stack<TreeNode> stacks = new Stack<>();        if (root.right != null) {            stacks.push(root.right);        }        if (root.left != null) {            stacks.push(root.left);        }        while (!stacks.empty()) {            TreeNode node = stacks.pop();            p.right = node;            p.left = null;            p = p.right;            if (node.right != null) {                stacks.push(node.right);            }            if (node.left != null) {                stacks.push(node.left);            }        }    }
 /**     * 递归的方式解决     *     * @param root     * @return     */    // return : the tail of the list.    public TreeNode dfs(TreeNode root) {        if (root == null) {            return null;        }        TreeNode left = root.left;        TreeNode right = root.right;        // Init the root.        root.left = null;        root.right = null;        TreeNode tail = root;        // connect the left tree.        if (left != null) {            tail.right = left;            tail = dfs(left);        }        // connect the right tree.        if (right != null) {            tail.right = right;            tail = dfs(right);        }        return tail;    }
0 0