vector<vector<int> > Print(TreeNode* pRoot)
{
//二维数组保存每一行的数据
vector<vector<int> > result;
//合法性验证
if (pRoot == NULL)
{
return result;
}
//stack 分别存奇数层和偶数层
stack<TreeNode*> stack1;
stack<TreeNode*> stack2;
//奇数层放在stack1
stack1.push(pRoot);
//访问这两个栈
while(!stack1.empty() || !stack2.empty())
{
//访问奇数层
if (!stack1.empty())
{
vector<int> temp;
while(!stack1.empty())
{
TreeNode* data = stack1.top();
stack1.pop();
temp.push_back(data->val);
//将下层数据放在stack2中
if (data->left != null)
{
//先放左子树 后放右子树
stack2.push(data->left);
}
if (data->right != null)
{
stack2.push(data->right);
}
}
result.push_back(temp);
}
//访问偶数层
if (!stack2.empty())
{
vector<int> temp;
while(!stack2.empty())
{
TreeNode* data = stack2.top();
stack2.pop();
temp->push_back(data->val);
//将下层数据放在stack1中
if (data->right != null)
{
stack1.push(data->right);
}
if (data->left != null)
{
stack1.push(data->right);
}
}
result.push_back(temp);
}
}
}
关于二叉树之字遍历的思考
最新推荐文章于 2024-08-13 10:58:47 发布