c++ - 前序树遍历和入栈顺序
问题描述
堆栈推送的顺序在树的前序遍历中是否重要?
例如,迭代前序遍历
在以下源代码中,
void iterativePreorder(node* root)
{
if (root == NULL)
return;
stack<node*> nodeStack;
nodeStack.push(root);
while (nodeStack.empty() == false)
{
struct node* node = nodeStack.top();
printf("%d ", node->data);
nodeStack.pop();
if (node->right)//<--------------------------------
nodeStack.push(node->right);
if (node->left)//<---------------------------------
nodeStack.push(node->left);
}
}
如果我切换左右节点的堆栈推送位置,
void iterativePreorder(node* root)
{
if (root == NULL)
return;
stack<node*> nodeStack;
nodeStack.push(root);
while (nodeStack.empty() == false)
{
struct node* node = nodeStack.top();
printf("%d ", node->data);
nodeStack.pop();
if (node->left)//<---------------------------------
nodeStack.push(node->left);
if (node->right)//<--------------------------------
nodeStack.push(node->right);
}
}
有什么区别吗?
我的意思是,如果切换位置,那仍然是正确的预购遍历吗?
解决方案
推荐阅读
- java - 如何简化 split() 的实现?
- visual-studio - 防止在 Nuget 还原时添加内容文件
- javascript - 另一个 GetListItems 函数中的 SPServices GetListItems 函数
- wagtail - __init__() 得到了一个意外的关键字参数“所有者”
- java - MergeSort 和 insertSort 组合算法一起运行比单独运行慢,但应该运行得更快
- java - 用自定义字母替换字符串中的字符
- reactjs - 如何从表中获取数据到状态
- twitter-bootstrap - Foreach 引导程序
- database - 无法连接 DB::table Laravel 5.7
- macos - NSTextView 在粘贴前修改字符串