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: 3 / 9 20 / 15 7 return its bottom-up level order traversal as: [ [15,7] [9,20], [3], ] 1 public static List<List<int>> BinaryTreeLevelOrderTraversalII(BTNode root) 2 { 3 List<List<int>> ret = new List<List<int>>(); 4 if (root == null) 5 return ret; 6 7 Queue<BTNode> read = new Queue<BTNode>(); 8 Queue<BTNode> write = new Queue<BTNode>(); 9 Stack<List<int>> stack = new Stack<List<int>>(); 10 read.Enqueue(root); 11 12 while (read.Count > 0) 13 { 14 List<int> level = new List<int>(); 15 while (read.Count > 0) 16 { 17 BTNode temp = read.Dequeue(); 18 level.Add(temp.Value); 19 20 if (temp.Left != null) 21 { 22 write.Enqueue(temp.Left); 23 } 24 if (temp.Right != null) 25 { 26 write.Enqueue(temp.Right); 27 } 28 } 29 30 stack.Push(level); 31 32 //swap read and write 33 Queue<BTNode> tempQ = read; 34 read = write; 35 write = tempQ; 36 } 37 38 while(stack.Count > 0) 39 { 40 ret.Add(stack.Pop()); 41 } 42 43 return ret; 44 } 代码分析: 不就前一题,加个 Stack 吗?我不懂了。。。。 |
|
来自: 雪柳花明 > 《LeetCode》