Binary Tree Level Order Traversal II
2014-11-09 14:19
211 查看
这道题A的略烦
For example:
Given binary tree
return its bottom-up level order traversal as:
ps:DFS实现
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] ]
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { int height; TreeNode root; public List<List<Integer>> levelOrderBottom(TreeNode root) { this.height = getDepth(root);//获取树的高度 this.root = root; List<List<Integer>> list = new ArrayList<List<Integer>>(); for(int i = 0; i < height; i++){ List<Integer> element = new ArrayList<Integer>(); list.add(element); }//this.height没有错 preOrder(root, list); return list; } /** * node在tree中高度 * @param root * @param node * @return */ public int getDepth(TreeNode root, TreeNode node){ if(null == root) return -Integer.MAX_VALUE; if(node == root) return 1; else{ int maxl = getDepth(root.left, node); int maxr = getDepth(root.right, node); if(maxl > maxr) return maxl + 1; else return maxr + 1; } } /** * 获取树的高度 * @param root * @return */ public int getDepth(TreeNode root){ if(null == root){ return 0; }else{ int maxl = getDepth(root.left); int maxr = getDepth(root.right); return maxl>maxr ? (maxl + 1):(maxr + 1); } } /** * 前序遍历树 * @param root */ public void preOrder(TreeNode root, List<List<Integer>> list){ if(null != root){ int height = getDepth(this.root, root); List<Integer> element = list.get(this.height - height); element.add(root.val); preOrder(root.left, list); preOrder(root.right, list); } } }
ps:DFS实现
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> container = new ArrayList<List<Integer>>(); if(null == root){ return container; } //List<TreeNode> theSameLevel = new ArrayList<TreeNode>();//存放同一层节点 Queue<TreeNode> theSameLevel = new LinkedList<TreeNode>(); theSameLevel.add(root); while(!theSameLevel.isEmpty()){//theSameLevel不为空 List<Integer> oneLevel = new ArrayList<Integer>(); Queue<TreeNode> temp = new LinkedList<TreeNode>();//暂存同一层的结点 while(!theSameLevel.isEmpty()){ TreeNode cur = theSameLevel.remove(); oneLevel.add(cur.val); if(null != cur.left) temp.add(cur.left); if(null != cur.right) temp.add(cur.right); } theSameLevel = temp; container.add(0, oneLevel); } return container; } }
相关文章推荐
- LeetCode: Binary Tree Level Order Traversal II [107]
- leetcode:Binary Tree Level Order Traversal II
- leetcod Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II 问题解答
- Leetcode Binary Tree Level Order Traversal II
- leetcode--Binary Tree Level Order Traversal II
- LeetCode OJ:Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II (leetcode)
- 63. Binary Tree Level Order Traversal II
- binary-tree-level-order-traversal-ii
- [leetcode] Binary Tree Level Order Traversal II
- 【LeetCode】binary-tree-level-order-traversal i&ii&zigzag
- Binary Tree Level Order Traversal II
- LeetCode-Binary Tree Level Order Traversal II
- LeetCode | Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Leetcode Binary Tree Level Order Traversal II
- LeetCode-Binary Tree Level Order Traversal II