• 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;
            }
            
  • 相关阅读:
    接口的显式实现和隐式实现
    MVC
    委托
    测试用例(TestCase)
    The remote server returned an error: NotFound.
    事件
    WCF大数据量传输配置
    多态随笔
    领域模型(domain model)
    IQueryable接口和IEnumberable接口
  • 原文地址:https://www.cnblogs.com/theonemars/p/4254102.html
Copyright © 2020-2023  润新知