C 获取二叉树节点

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

我使用堆栈进行了非递归的后序。但在Main函数中,我希望使用scanf获得树节点,而不是手工键入所有树节点。例如,printf(“您想要多少树节点?”);获取树节点的编号,然后printf(“输入树节点”);所以我像这样输入12345。 我如何编写代码

#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;
}