LeetCode Online Judge 题目C# 练习 - 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],
]

 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 吗?我不懂了。。。。

posted @ 2012-10-25 00:38  ETCOW  阅读(414)  评论(0编辑  收藏  举报