zoukankan      html  css  js  c++  java
  • 二叉树展开为链表

    给定一个二叉树,原地将它展开为链表。

    例如,给定二叉树

        1
       / 
      2   5
     /    
    3   4   6

    将其展开为:

    1
     
      2
       
        3
         
          4
           
            5
             
              6
    解法
    解法一:
    1.对树进行先序遍历,把每遍历一个节点就将该节点入队
    2.遍历完之后,对队列进行出队操作
    3.每出一个节点,就将该节点的left指针置为null,右指针指向下一个出队的节点
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        Queue<TreeNode> queue;
        public void flatten(TreeNode root) {
            //1,2,3,4,5,6 先序
            //先序遍历二叉树,把每个节点入队
            //把先序遍历后的队列出队:left =null,right=下一个节点
            if(root!=null){
                queue = new LinkedList<TreeNode>();
                pre(root);
                TreeNode head = new TreeNode(0);
                TreeNode p = head;
                for(TreeNode q : queue){
                    q.left=null;
                    p.right = q;
                    p = p.right;
                
            }
            }
            
        }
        public void pre(TreeNode root) {
            this.queue.offer(root);
            if(root.left!=null)
                pre(root.left);
            if(root.right!=null)
                pre(root.right);
            
        }
    }

    解法二:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
    
        public void flatten(TreeNode root) {
            if (root == null) return;
            Stack<TreeNode> stk = new Stack<TreeNode>();
            stk.push(root);
            while (!stk.isEmpty()){
                TreeNode curr = stk.pop();
                if (curr.right!=null)  
                     stk.push(curr.right);
                if (curr.left!=null)  
                     stk.push(curr.left);
                if (!stk.isEmpty()) 
                     curr.right = stk.peek();
                curr.left = null;  // dont forget this!! 
            }
        }
    }


  • 相关阅读:
    用户可以设置每页显示记录数的分页程序
    将分页程序写成函数
    对查询结果进行分页
    使用mysql_query()方法操纵数据库以及综合实例
    php访问数据库
    cookie记录用户的浏览商品的路径
    php中如何输出当前服务器的(中国)当前时间
    mysql 与 mysqli的区别
    Django框架 之 ORM中介模型
    Django框架 之 查询 Extra
  • 原文地址:https://www.cnblogs.com/yejiang/p/10309215.html
Copyright © 2011-2022 走看看