tree->data=post[n-1];是什么意思
时间: 2024-04-28 20:18:49 浏览: 5
`tree` 是一个指向 `Tree` 结构体的指针,`post` 是一个后序遍历数组,`n` 表示节点的个数。`tree->data` 表示访问 `tree` 指向的节点的 `data` 成员变量,`post[n-1]` 表示访问后序遍历数组中最后一个节点的值。因此,`tree->data=post[n-1]` 的意思是将后序遍历数组中最后一个节点的值赋值给当前节点的值。
相关问题
#include<stdio.h> typedef struct node{ int data; struct node *lchild,*rchild; }Tree; Tree* CreatTree(int in[],int post[],int n) { if(n==0) return NULL; int i; Tree *tree=(Tree*)malloc(sizeof(Tree)); tree->data=post[n-1]; for(i=0;i<n;i++) if(post[n-1]==in[i]) break; tree->lchild=CreatTree(in,post,i); tree->rchild=CreatTree(in+i+1,post+i,n-i-1); return tree; } void CountTree(Tree* tree) { if(tree!=NULL) { printf(" %d",tree->data); CountTree(tree->lchild); CountTree(tree->rchild); } } int main() { int n,i,j; int post[100001],in[100001]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&post[i]); for(i=0;i<n;i++) scanf("%d",&in[i]); Tree* tree=CreatTree(in,post,n); printf("Preorder:"); CountTree(tree); }
这是一段 C 语言代码,实现了根据中序遍历和后序遍历构建二叉树,并输出先序遍历结果。具体来说,代码中定义了一个结构体 `Tree`,表示二叉树的节点,包含节点的值 `data`,以及左右子树的指针 `lchild` 和 `rchild`。函数 `CreatTree` 是根据中序遍历数组 `in[]` 和后序遍历数组 `post[]` 构建二叉树的函数,通过递归实现。函数 `CountTree` 是输出二叉树先序遍历结果的函数,同样也是通过递归实现。在 `main` 函数中,先读入节点个数 `n`,以及中序遍历和后序遍历数组,然后调用 `CreatTree` 函数构建二叉树,并调用 `CountTree` 函数输出先序遍历结果。
Tree create(int PostStart, int PostEnd, int InStart, int InEnd){ if (PostStart>PostEnd||InStart>InEnd) return NULL; int x=post[PostEnd]; Tree T=(Tree)malloc(sizeof(struct Node)); T->data=x; int mid; for(mid=InStart;mid<=InEnd;mid++){ if(in[mid]==x) break; } int leftLength=mid-InStart; T->left=create(PostStart,PostStart+leftLength-1,InStart,mid-1); T->right=create(PostStart+leftLength,PostEnd-1,mid+1,InEnd); return T; }是什么意思
这段代码是用来根据二叉树的中序遍历和后序遍历构建二叉树的。其中,函数名为 create,输入参数包括后序遍历的起点和终点 PostStart、PostEnd,中序遍历的起点和终点 InStart、InEnd。函数返回一个指向根节点的指针 T。
首先,如果 PostStart>PostEnd 或 InStart>InEnd,说明已经访问完了所有的节点,此时返回 NULL。
然后,根据后序遍历的最后一个节点,即 post[PostEnd],创建一个新的节点 T,并将其值赋为 x。
接着,根据中序遍历的性质,可以找到该节点在中序遍历中的位置 mid,从而可以计算出左子树的长度 leftLength。
接下来,递归地创建左子树和右子树。左子树的后序遍历的起点为 PostStart,终点为 PostStart+leftLength-1;中序遍历的起点为 InStart,终点为 mid-1。右子树的后序遍历的起点为 PostStart+leftLength,终点为 PostEnd-1;中序遍历的起点为 mid+1,终点为 InEnd。
最后返回根节点 T。