• 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具体的地方。
         */
      
        /*
         * 这个也是根据中规中矩的根左右的顺序,做出来的dfs,下面还利用了
         * stack来做dfs的pre order,原理都是一样的,不过这里利用了
         * 一个全局变量TreeNode来记录上一次的遗留的点,只需要把上次的
         * 右边设为root节点就好了
         */
        public TreeNode pre = null;
        public void flatten(TreeNode root) {
            if (root == null)
                return;
            if (pre != null) {
                pre.right = root;
            }
            pre = root;
            TreeNode left = root.left;
            TreeNode right = root.right;
            flatten(left);
            flatten(right);
            root.left = null;
        }
        /*
         * 这个就是中规中矩的根左右的顺序,由上到下,依次遍历
         * 利用stack完成
         */
        public void flatten1(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;
                temp.left = null;
                prev = temp;
            }
        }
        /*
         * 2016-7-19 by Mingyang
         * 自底向上,右左根的顺序,依次往后退
         * 设置一个prev记录后退的路径
    *大神的自底向上的代码
    */ private TreeNode prev = null; public void flatten(TreeNode root) { if (root == null) return; flatten(root.right); flatten(root.left); root.right = prev; root.left = null; prev = root; }
  • 相关阅读:
    pug模板引擎(原jade)之 分支条件
    pug模板引擎(原jade)之 属性
    hosts的作用
    typeScript 之 (7) 构造函数和this
    typeScript 之 (8) 继承,重写,super
    typeScript 之(6) 类的简介
    MySQL:一条更新语句是如何执行的
    Centos7 使用 Kubeadm 搭建 k8s 集群
    HTTP Keep-Alive模式客户端与服务器如何判定传输完成
    MySQL:一条SQL是如何执行的
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5511141.html
Copyright © 2020-2023  润新知