二叉树的非递归前序遍历代码
时间: 2023-09-07 18:17:55 浏览: 112
二叉树的非递归前序遍历可以使用栈来实现。具体实现过程如下:
1. 创建一个栈,将根节点入栈。
2. 循环执行以下操作,直到栈为空:
1. 弹出栈顶节点,并将其值输出。
2. 如果该节点的右子节点不为空,则将右子节点入栈。
3. 如果该节点的左子节点不为空,则将左子节点入栈。
代码实现如下:
```java
public void iterativePreorder(TreeNode root) {
if (root == null) {
return;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
System.out.print(node.val + " ");
if (node.right != null) {
stack.push(node.right);
}
if (node.left != null) {
stack.push(node.left);
}
}
}
```
其中,`TreeNode` 表示二叉树的节点,具体实现可以自行定义。
相关问题
二叉树非递归前序遍历
二叉树的非递归前序遍历是一种通过栈来实现的遍历方式。具体步骤如下:
1. 创建一个空栈,并将根节点入栈。
2. 当栈不为空时,执行以下操作:
- 弹出栈顶节点,并访问该节点。
- 如果该节点的右子节点不为空,则将右子节点入栈。
- 如果该节点的左子节点不为空,则将左子节点入栈。
3. 重复步骤2,直到栈为空。
这样,就可以按照前序遍历的顺序访问二叉树的所有节点。
二叉树的非递归前序遍历c语言代码
二叉树的非递归前序遍历是指先访问根节点,然后遍历左子树,最后遍历右子树。这里是一个简单的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新的节点
TreeNode* createNode(int data) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 前序遍历函数
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 访问根节点
preorderTraversal(root->left); // 遍历左子树
preorderTraversal(root->right); // 遍历右子树
}
}
int main() {
// 创建示例二叉树
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
printf("前序遍历结果: ");
preorderTraversal(root);
printf("\n");
return 0;
}
```
在这个例子中,我们首先检查当前节点是否为空,如果不为空,就打印节点值,然后递归地遍历左右子树。注意,这个实现使用了栈来模拟递归过程,实际上是采用了迭代的方式。
阅读全文