zoukankan      html  css  js  c++  java
  • 33: Binary Tree Level Order Traversal II

    /************************************************************************/
            /*       33:      Binary Tree Level Order Traversal II                                         */
            /************************************************************************/
            /*
             * Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

    For example:
    Given binary tree {3,9,20,#,#,15,7},

        3
       /
      9  20
        / 
       15   7

    return its bottom-up level order traversal as:

    [
      [15,7],
      [9,20],
      [3]
    ]

             * */
            
          //从叶子节点到根节点的分层遍历

     public List<List<Integer>> levelOrderBottom(TreeNode root)
            {
                 List<List<Integer>> alllevelnodes = new ArrayList<List<Integer>>();
                 List<List<TreeNode>> allnodes = LevelOrderTreeNodeTop(root);
                 for (int i=allnodes.size()-1;i>=0;i--)
                 {
                     System.out.println("---------------"+(i+1)+"层------");
                     List<Integer> tempnodes=new ArrayList<Integer>();
                     for (int j = 0; j < allnodes.get(i).size();j++ )
                     {
                         tempnodes.add(allnodes.get(i).get(j).val);
                         System.out.println("--" + allnodes.get(i).get(j).val);
                     }
                     alllevelnodes.add(tempnodes);
                 }
                 return alllevelnodes;
            }
    
            
          //从根节点点到叶子节的分层遍历得到节点序列
            public List<List<TreeNode>> LevelOrderTreeNodeTop(TreeNode rootNode)
            {
                List<List<TreeNode>> allnodes = new ArrayList<List<TreeNode>>();
                if (rootNode==null)
                {
                    return allnodes;
                }
                List<TreeNode> rootlevel = new ArrayList<TreeNode>();
                rootlevel.add(rootNode);
                allnodes.add(rootlevel);
                while(true)
                {
                    List<TreeNode> templevel = new ArrayList<TreeNode>();
                    for (int i=0;i<allnodes.get(allnodes.size()-1).size();i++)
                    {
                        if(allnodes.get(allnodes.size()-1).get(i).left!=null)
                        {
                            templevel.add(allnodes.get(allnodes.size()-1).get(i).left);
                        }
                        if(allnodes.get(allnodes.size()-1).get(i).right!=null)
                        {
                            templevel.add(allnodes.get(allnodes.size()-1).get(i).right);
                        }
                    }
                    if (templevel.size()<1)
                    {
                        break;
                    }
                    allnodes.add(templevel);
                }
                return allnodes;
            }
            
            //从叶子节点到根节点的分层遍历 代码改进一些   
            public List<List<Integer>> levelOrderBottomEx(TreeNode root) {
                List<List<Integer>> container = new ArrayList<List<Integer>>();
                if (root == null) return container;
                TreeNode cur = null;
                Queue<TreeNode> sameLevel = new LinkedList<TreeNode>();
                sameLevel.add(root);
                while (!sameLevel.isEmpty()) {
                    List<Integer> oneLevel = new ArrayList<Integer>();
                    Queue<TreeNode> temp = new LinkedList<TreeNode>();
                    while(!sameLevel.isEmpty()) {
                        cur = sameLevel.remove();
                        oneLevel.add(cur.val);
                        if (cur.left != null)  temp.add(cur.left); 
                        if (cur.right != null) temp.add(cur.right);
                    }
                    container.add(0,oneLevel);
                    sameLevel = temp;
                }
                return container;
            }
            
  • 相关阅读:
    iOS开发之ImageView复用实现图片无限轮播
    IOS 通过脚本自动打包工具 webfrogs/xcode_shell
    (iOS)判断GPS坐标是否在中国
    如何轻松实现iOS9多任务管理器效果(iCarousel高级教程)
    有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?
    PID控制算法的C语言实现四 增量型PID的C语言实现
    PID控制算法的C语言实现三 位置型PID的C语言实现
    PID控制算法的C语言实现二 PID算法的离散化
    PID控制算法的C语言实现一 PID算法原理
    人生是一个连续的过程,没什么东西能影响人的一生,怎么选择不是问题。问题是每天都要努力 (转)
  • 原文地址:https://www.cnblogs.com/theonemars/p/4254102.html
Copyright © 2011-2022 走看看