C 获取二叉树节点
我使用堆栈进行了非递归的后序。但在Main函数中,我希望使用scanf获得树节点,而不是手工键入所有树节点。例如,printf(“您想要多少树节点?”);获取树节点的编号,然后printf(“输入树节点”);所以我像这样输入12345。 我如何编写代码C 获取二叉树节点,c,data-structures,scanf,binary-tree,C,Data Structures,Scanf,Binary Tree,我使用堆栈进行了非递归的后序。但在Main函数中,我希望使用scanf获得树节点,而不是手工键入所有树节点。例如,printf(“您想要多少树节点?”);获取树节点的编号,然后printf(“输入树节点”);所以我像这样输入12345。 我如何编写代码 #include <stdio.h> #include <stdbool.h> #define STACK_SIZE 10 typedef struct TreeNode { int data; struc
#include <stdio.h>
#include <stdbool.h>
#define STACK_SIZE 10
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
}TreeNode;
typedef struct Stack {
TreeNode *buf[STACK_SIZE];
int top;
}Stack;
void postOrder(TreeNode *root, Stack *stack)
{
Stack* s = stack;
if (root == NULL) return;
TreeNode* current = root;
TreeNode *tmp;
bool done = 0;
InitStack(s);
while(!done)
{
while (current != NULL)
{
if (current->right != NULL)
Push(s, current->right);
Push(s, current);
current = current->left;
}
if (IsEmpty(s))
break;
current = Pop(s);
if (IsEmpty(s))
{
printf("%d", current->data);
break;
}
tmp = Pop(s);
if (tmp == current->right)
{
Push(s, current);
current = current->right;
}
else
{
printf("%d", current->data);
Push(s, tmp);
current = NULL;
}
}
}
int main()
{
Stack s;
TreeNode one, two, three, four, five;
one.data = 1;
two.data = 2;
three.data = 3;
four.data = 4;
five.data = 5;
one.left = &two; one.right = &three;
two.left = &four; two.right = &five;
three.left = NULL; three.right = NULL;
four.left = NULL; four.right = NULL;
five.left = NULL; five.right = NULL;
postOrder(&one, &s);
printf("\n");
getchar();
return 0;
}
#包括
#包括
#定义堆栈大小为10
类型定义结构树节点{
int数据;
结构树节点*左;
结构树节点*右侧;
}三烯醇;
typedef结构堆栈{
TreeNode*buf[堆叠尺寸];
int top;
}堆叠;
无效后序(树节点*根,堆栈*堆栈)
{
堆栈*s=堆栈;
if(root==NULL)返回;
TreeNode*电流=根;
TreeNode*tmp;
bool-done=0;
初始堆栈(s);
而(!完成)
{
while(当前!=NULL)
{
如果(当前->右侧!=NULL)
推送(s,当前->右侧);
推动(s,电流);
当前=当前->左侧;
}
如果(i)是空的
打破
电流=Pop(s);
如果(i)是空的
{
printf(“%d”,当前->数据);
打破
}
tmp=持久性有机污染物;
如果(tmp==当前->右侧)
{
推动(s,电流);
当前=当前->右侧;
}
其他的
{
printf(“%d”,当前->数据);
推(s,tmp);
电流=零;
}
}
}
int main()
{
堆栈s;
三个一,二,三,四,五;
一、数据=1;
2.数据=2;
三.数据=3;
4.数据=4;
5.数据=5;
一。左=&2;一。右=&3;
二。左=&四;二。右=&五;
三。左=空;三。右=空;
four.left=NULL;four.right=NULL;
5.left=NULL;5.right=NULL;
邮购(&1,&s);
printf(“\n”);
getchar();
返回0;
}
使用动态内存分配实现一个单独的方法来构建树。使用malloc函数分配内存。将新节点插入到树的适当位置
void insertNode(TreeNode *root,int data){
//To Do create node dynamically using malloc and attach to root at appropriate position
}
读取输入的方法如下所示:主函数:
intmain()
{
堆栈s;
TreeNode*rootNode=NULL;
int nodeCount;
int数据;
printf(“输入节点数:\n”);
scanf(“%d”、&nodeCount);
printf(“输入树节点数据:\n”);
for(int i=0;i
您需要了解动态内存分配。你的C教材应该有一章来处理这个问题。
int main()
{
Stack s;
TreeNode *rootNode = NULL;
int nodeCount;
int data;
printf("Enter number of nodes:\n");
scanf("%d",&nodeCount);
printf("enter TreeNodes Data:\n");
for (int i=0; i < nodeCount; i++) {
scanf("%d",&data);
insertNode(rootNode,data);
}
postOrder(rootNode, &s);
return 0;
}