用二叉链表建立二叉树

 1 #include<stdio.h> 
 2 #include<stdlib.h>
 3 typedef struct node
 4 {
 5     int data;
 6     struct node *l,*r;
 7     
 8 }tree;
 9 tree* Creattree(void)//层次建立二叉树 
10 {
11     int data,front=1,rear=0; 
12     tree* t, *root, *q[1001];
13   while(scanf("%d", &data),data!=-1) 
14   { 
15   if(data==0) 
16   t = NULL; 
17   else 
18   { 
19   t=(tree*)malloc(sizeof(tree));
20   t->data=data;
21   t->l=NULL; 
22   t->r=NULL; 
23   } 
24   rear++;
25   q[rear]=t;//元素入队 
26   if(rear==1)
27   root= t;//建立根结点 
28   else
29  {
30   if(q[front]!=NULL) 
31   { 
32   if(rear%2==0)
33   q[front]->l = t;//偶数给左 
34   else 
35   q[front]->r = t;//奇数给右 
36   } 
37   if(rear%2==1)//保证两个数都挂上树了再换下一个结点 
38   front++;
39 }
40 } 
41 return root;
42 }
43 void preorder(tree *p)//这里只举例前序遍历,中序和后序前一张有 
44 {
45     if(p==NULL)
46    return;
47    printf(" %d", p->data);
48    preorder(p->l);
49    preorder(p->r);
50 }
51 int main()
52 {
53     tree *t;
54     int n;
55     scanf("%d",&n);
56     while(n--)
57     {
58         t=Creattree();
59         preorder(t);
60         printf("\n");
61     }
62     return 0;
63 }

 

转载于:https://www.cnblogs.com/AQhhhh/p/10845311.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是用二叉链表建立二叉树并对其进行遍历的C语言代码: ```c #include <stdio.h> #include <stdlib.h> // 定义二叉树结点结构体 typedef struct TreeNode { char data; struct TreeNode *left; struct TreeNode *right; } TreeNode; // 创建二叉树 TreeNode* createBinaryTree() { char data; scanf("%c", &data); if (data == '#') { return NULL; } TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode)); root->data = data; root->left = createBinaryTree(); root->right = createBinaryTree(); return root; } // 前序遍历二叉树 void preorderTraversal(TreeNode *root) { if (root == NULL) { return; } printf("%c ", root->data); preorderTraversal(root->left); preorderTraversal(root->right); } // 中序遍历二叉树 void inorderTraversal(TreeNode *root) { if (root == NULL) { return; } inorderTraversal(root->left); printf("%c ", root->data); inorderTraversal(root->right); } // 后序遍历二叉树 void postorderTraversal(TreeNode *root) { if (root == NULL) { return; } postorderTraversal(root->left); postorderTraversal(root->right); printf("%c ", root->data); } int main() { printf("请输入二叉树的先序遍历序列(以#表示空结点):\n"); TreeNode *root = createBinaryTree(); printf("前序遍历结果:"); preorderTraversal(root); printf("\n中序遍历结果:"); inorderTraversal(root); printf("\n后序遍历结果:"); postorderTraversal(root); printf("\n"); return 0; } ``` 其中,`createBinaryTree()`函数用于创建二叉树,`preorderTraversal()`、`inorderTraversal()`和`postorderTraversal()`函数分别用于实现前序遍历、中序遍历和后序遍历操作。在`main()`函数中,首先通过用户输入创建二叉树,然后对其进行遍历并输出遍历结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值