您的位置:首页 > 其它

(待思考--不采用逆置等的思想)107. Binary Tree Level Order Traversal II

2017-01-09 18:03 417 查看


107. 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,null,null,15,7]
,

3
/ \
9  20
/  \
15   7


return its bottom-up level order traversal as:

[
[15,7],
[9,20],
[3]
]


方法一、递归的方法:用到c++的反向迭代器
vector<vector<int> > result;

void levelTra(TreeNode *root, int level)
{
if(root == NULL)
return;
if(level == result.size())
{
vector<int> v;
result.push_back(v);
}
result[level].push_back(root->val);
levelTra(root->left, level+1);
levelTra(root->right, level+1);
}

vector<vector<int> > levelOrderBottom(TreeNode *root)
{
levelTra(root, 0);
return vector<vector<int> >(result.rbegin(), result.rend());
}


方法二、非递归的方法,层次遍历

(1)stack

vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> result;
if(NULL == root)
return vector<vector<int>>();

queue<TreeNode*> que;
que.push(root);
int countLevNodes = 1;
vector<int> temp;
stack<vector<int>> tempSta;
while(!que.empty())
{
TreeNode* tempTreeNode = que.front();
que.pop();
temp.push_back(tempTreeNode->val);
countLevNodes--;

if(tempTreeNode->left != NULL)
que.push(tempTreeNode->left);
if(tempTreeNode->right != NULL)
que.push(tempTreeNode->right);
if(countLevNodes == 0)
{
tempSta.push(temp);
temp.clear();
countLevNodes = que.size();
}
}

while(!tempSta.empty())
{
temp = tempSta.top();
tempSta.pop();
result.push_back(temp);
}

return result;
}


(2)reverse

vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> result;
if(NULL == root)
return vector<vector<int>>();

queue<TreeNode*> que;
que.push(root);
int countLevNodes = 1;
vector<int> temp;
while(!que.empty())
{
TreeNode* tempTreeNode = que.front();
que.pop();
temp.push_back(tempTreeNode->val);
countLevNodes--;

if(tempTreeNode->left != NULL)
que.push(tempTreeNode->left);
if(tempTreeNode->right != NULL)
que.push(tempTreeNode->right);
if(countLevNodes == 0)
{
result.push_back(temp);
temp.clear();
countLevNodes = que.size();
}
}

reverse(result.begin(),result.end());
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: