114. Flatten Binary Tree to Linked List

Posted 我的名字叫周周

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了114. Flatten Binary Tree to Linked List相关的知识,希望对你有一定的参考价值。

    /*
     * 114. Flatten Binary Tree to Linked List
     * 2016-5-19 By Mingyang
     * 注意stack不能用!=null来描述,应该用
     * (!stack.isEmpty())来表述!这道题目你会发现好像是根左右的顺序,然后就用stack来写
     * 就是一个preorder的变体,在recursive的方法中呢,我们必须用一个全局变量来保存上一个节点的位置,因为
     * 我们退回来的时候才可以知道lastNode具体的地方。
     */
    public void flatten(TreeNode root) {
        if (root == null)
            return;
        Stack<TreeNode> stack = new Stack<TreeNode>();
        stack.push(root);
        TreeNode prev = null;
        while (!stack.isEmpty()) {
            TreeNode temp = stack.pop();
            if (temp.right != null)
                stack.push(temp.right);
            if (temp.left != null)
                stack.push(temp.left);
            if (prev != null) {
                prev.right = temp;
                prev.left = null;
            }
            prev = temp;
        }
    }    
    /*
     * 我在自己写的时候也意识到这个是一个preorder的顺序,不过忘了设置一个全局变量lastNode来连接上下各节点
     * 这里就是没访问到一个root都把其赋予lastNode
     */
    private TreeNode lastNode = null;//lastNode就是连接左边和右边的纽带
    public void flattenRec(TreeNode root) {
            if (root == null) {
                return;
            }
            if (lastNode != null) {
                lastNode.left = null;//这里面就是真正的改变整个TreeNode的部分,相当于preorder的根操作。
                lastNode.right = root;
            }
            lastNode = root;
            TreeNode right = root.right;//这不不能省去,因为一旦省去了以后我们就不能记录当时的root.right了
            flatten(root.left);
            flatten(right);
     }

 

以上是关于114. Flatten Binary Tree to Linked List的主要内容,如果未能解决你的问题,请参考以下文章

114. Flatten Binary Tree to Linked List

114. Flatten Binary Tree to Linked List

114. Flatten Binary Tree to Linked List

114. Flatten Binary Tree to Linked List

!!!!!!114. Flatten Binary Tree to Linked List

LeetCode 114. Flatten Binary Tree to Linked List