zoukankan      html  css  js  c++  java
  • lintcode:将二叉树拆成链表

    题目

    将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。

     注意事项

    不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。

    样例
                  1
                   
         1          2
        /           
       2   5    =>    3
      /              
     3   4   6          4
                         
                          5
                           
                            6

    解题

    修改前序遍历

    /**
     * Definition of TreeNode:
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left, right;
     *     public TreeNode(int val) {
     *         this.val = val;
     *         this.left = this.right = null;
     *     }
     * }
     */
    public class Solution {
        /**
         * @param root: a TreeNode, the root of the binary tree
         * @return: nothing
         * 前序遍历:根左右
         * 修改根的right指向左部分
         * 左部分的right指向右部分
         */
        public void flatten(TreeNode root) {
            // write your code here
            // 空结点
            if(root == null)
                return;
            // 左右结点都空
            if(root.left==null && root.right==null)
                return;
            // 左结点空
            if(root.left==null){
                TreeNode right = root.right;
                flatten(right);
                return;
            }
            // 右节点空
            if(root.right==null){
                TreeNode left = root.left;
                root.right = left;
                
                flatten(left);
                root.left = null;// left结点设置为空
                return;
            }
            // 左右结点都不空
            TreeNode left = root.left;
            TreeNode right = root.right;
            root.right = left; 
            
            flatten(left);
            
            TreeNode p = left;
            while(p.right!=null){ // 找到left部分的最右结点
                p = p.right;
            }
            p.right = right;
            flatten(right);
            
            root.left = null; // left结点设置为空
            return;
        }
    }
  • 相关阅读:
    JS 禁止刷新和右键
    报错 避免重复
    CSS 总结
    CSS BUG 总结
    安装 mrtg
    人人网 网站接入总结
    PHPcms 把盛大登陆换成人人网登陆
    HTML 相同name 传递一个数组
    file_get_contents无法请求https连接的解决方法
    现货黄金白银上阻力位和压力位的确定和应用
  • 原文地址:https://www.cnblogs.com/bbbblog/p/5651387.html
Copyright © 2011-2022 走看看