用非递归实现二叉树的前序、中序、后序遍历算法C语言代码
时间: 2023-07-10 09:10:49 浏览: 93
C语言二叉树的三种遍历方式的实现及原理
5星 · 资源好评率100%
好的,下面是用C语言实现的非递归算法代码:
前序遍历:
```c
void preorder(TreeNode* root) {
if (root == NULL) {
return;
}
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
TreeNode* node = s.top();
s.pop();
printf("%d ", node->val); // 访问节点
if (node->right != NULL) { // 先将右子节点入栈
s.push(node->right);
}
if (node->left != NULL) { // 再将左子节点入栈
s.push(node->left);
}
}
}
```
中序遍历:
```c
void inorder(TreeNode* root) {
if (root == NULL) {
return;
}
stack<TreeNode*> s;
TreeNode* node = root;
while (node != NULL || !s.empty()) {
if (node != NULL) { // 如果当前节点不为空,将其压入栈中,并将当前节点更新为其左子节点
s.push(node);
node = node->left;
} else { // 如果当前节点为空,弹出栈顶元素,访问该节点,并将当前节点更新为其右子节点
node = s.top();
s.pop();
printf("%d ", node->val); // 访问节点
node = node->right;
}
}
}
```
后序遍历:
```c
void postorder(TreeNode* root) {
if (root == NULL) {
return;
}
stack<TreeNode*> s1, s2;
s1.push(root);
while (!s1.empty()) {
TreeNode* node = s1.top();
s1.pop();
s2.push(node);
if (node->left != NULL) { // 先将左子节点入栈
s1.push(node->left);
}
if (node->right != NULL) { // 再将右子节点入栈
s1.push(node->right);
}
}
while (!s2.empty()) {
TreeNode* node = s2.top();
s2.pop();
printf("%d ", node->val); // 访问节点
}
}
```
以上就是用C语言实现的非递归算法代码。
阅读全文