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]
]
点击打开原题链接

跟从上往下层次遍历一样。最后把结果倒置一下就能够了~~


struct node
 {
	 TreeNode* tn;
	 int level;
 };
	
	class Solution 
	{
	public:
		vector<vector<int> > levelOrderBottom(TreeNode *root) 
		{
			vector<vector<int> > vvi;
			vector<int> vi;
			deque<node> di;
			node nd;
			int level = 0;
			if (root == NULL)
			{
				return vvi;
			}
			nd.level = 0;
			nd.tn = root;
			di.push_back(nd);
			node left,right;
			while (!di.empty()) 
			{
				nd = di.front();
				if (nd.tn->left != NULL)
				{
					left.tn = nd.tn->left;
					left.level = nd.level+1;
					di.push_back(left);
				}
				if (nd.tn->right != NULL)
				{
					right.tn = nd.tn->right;
					right.level = nd.level + 1;
					di.push_back(right);
				}
				// if (vi.empty())
				// {
				// 	vi.push_back(nd.tn->val);
				// 	level++;
				// 	di.pop_front();
				// }
				// else 
				// {
					nd = di.front();
					if (nd.level == level)
					{
						vi.push_back(nd.tn->val);
						di.pop_front();
					}
					else
					{
						vvi.push_back(vi);
						vi.clear();
						vi.push_back(nd.tn->val);
						level++;
						di.pop_front();
					}
			//	}
			}
			vvi.push_back(vi);
			
			return vector<vector<int> >(vvi.rbegin(),vvi.rend());
		}
		
	};


posted @ 2016-03-08 12:55  blfshiye  阅读(139)  评论(0编辑  收藏  举报