非递归创建二叉树的方法有哪些
时间: 2023-11-09 14:04:34 浏览: 34
非递归创建二叉树的方法有以下两种:
1. 使用栈:从根节点开始,先将根节点入栈,然后对于每一个节点,先检查其左子树是否存在,若存在,则将左子树入栈;若不存在,则弹出栈顶节点并检查其右子树是否存在,若存在,则将右子树入栈。
2. 使用队列:从根节点开始,先将根节点入队列,然后对于每一个节点,先检查其左子树是否存在,若存在,则将左子树入队列;若不存在,则不进行任何操作。接着检查其右子树是否存在,若存在,则将右子树入队列。最后弹出队首节点,重复上述操作直至队列为空。
这两种方法都可以实现非递归创建二叉树,具体使用哪一种方法可以根据具体情况而定。
相关问题
如何非递归创建二叉树
非递归创建二叉树的方法可以使用栈来实现。具体步骤如下:
1. 创建一个空栈,并将根节点压入栈中。
2. 当栈不为空时,执行以下步骤:
3. 弹出栈顶节点为当前节点。
4. 输入当前节点的值。
5. 询问用户是否有左子节点。如果有,创建左子节点并将其压入栈中。
6. 询问用户是否有右子节点。如果有,创建右子节点并将其压入栈中。
7. 当栈为空时,表示所有节点已遍历完毕,二叉树创建完成。
非递归创建二叉树c语言
以下是C语言实现非递归创建二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct tree{
int data;
struct tree * left;
struct tree * right;
}Bitree, *pBitree;
pBitree CreateTree(){
pBitree root = NULL, p = NULL;
int data;
scanf("%d", &data);
while (data != -1){
p = root;
pBitree node = (pBitree)malloc(sizeof(Bitree));
node->data = data;
node->left = NULL;
node->right = NULL;
if (root == NULL){
root = node;
}
else{
while (1){
if (data < p->data){
if (p->left == NULL){
p->left = node;
break;
}
else{
p = p->left;
}
}
else{
if (p->right == NULL){
p->right = node;
break;
}
else{
p = p->right;
}
}
}
}
scanf("%d", &data);
}
return root;
}
void Preorder(pBitree root){
if (root){
printf("%d\n", root->data);
Preorder(root->left);
Preorder(root->right);
}
else{
return;
}
}
int main(){
pBitree root = CreateTree();
Preorder(root);
return 0;
}
```
该代码中,CreateTree()函数用于创建二叉树,Preorder()函数用于先序遍历二叉树。在CreateTree()函数中,我们使用了一个while循环来读取用户输入的数据,并根据数据的大小来判断新节点应该插入到左子树还是右子树中。在插入新节点时,我们使用了一个while循环来找到新节点应该插入的位置。