您的位置:首页 > 其它

Binary Tree Level Order Traversal II

2014-10-05 21:18 369 查看
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());
		}
		
	};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: