找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 956|回复: 0
打印 上一主题 下一主题
收起左侧

关于C语言构建二叉树程序的问题!

[复制链接]
跳转到指定楼层
楼主
输入8个整数构建一个二叉树,对于二叉树节点,比当前节点少于或等于的放在树的左边子节点,大于的放在右边子节点。
以下是我写的代码,输出不出来这是为什么呢


  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. typedef struct node {  //节点结构体
  4.         int data;
  5.         struct node *left;
  6.         struct node *right;
  7. } Node;

  8. Node* insert(Node *root,int value)   //创建树
  9. {
  10.         Node* node=(Node*)malloc(sizeof(Node));//创建一个节点
  11.         node->data = value;
  12.         node->left = NULL;
  13.         node->right = NULL;
  14.         if(root==NULL)  //树为空则创建根
  15.         {
  16.                 root==node;
  17.         }
  18.         else
  19.         {
  20.                 Node *temp=root;  //从树根开始判断
  21.                 while(temp!=NULL)
  22.                 {
  23.                         if(value<=temp->data)  //小于或等于进左儿子
  24.                         {
  25.                                 if(temp->left==NULL)   //若左儿子为空,直接写入
  26.                                 {
  27.                                 temp->left=node;
  28.                                 return root;
  29.                                 }
  30.                                 else     //若左儿子不为空,继续判断
  31.                                 {
  32.                                         temp=temp->left;
  33.                                 }
  34.                         }
  35.                         else     //大于进右儿子
  36.                         {
  37.                                 if(temp->right==NULL)  //同左儿子
  38.                                 {
  39.                                         temp->right=node;
  40.                                         return root;
  41.                                 }
  42.                                 else
  43.                                 {
  44.                                         temp=temp->right;
  45.                                 }
  46.                         }
  47.                 }
  48.         }
  49.         return root;
  50. }

  51. void PreOrderTree(Node* root)  //前序遍历
  52. {
  53.         if (root != NULL)
  54.         {
  55.         printf("%d ", root->data);
  56.         PreOrderTree(root->left);
  57.         PreOrderTree(root->right);
  58.         }
  59. }
  60. void InOrderTree(Node* root)   //中序遍历
  61. {
  62.         if (root != NULL)
  63.         {
  64.         PreOrderTree(root->left);
  65.         printf("%d ", root->data);
  66.         PreOrderTree(root->right);
  67.         }
  68. }
  69. void PostOrderTree(Node* root)  //后序遍历
  70. {
  71.         if (root != NULL)
  72.         {
  73.         PreOrderTree(root->left);
  74.         PreOrderTree(root->right);
  75.         printf("%d ", root->data);
  76.         }
  77. }

  78. int main()
  79. {
  80.         int data[8];
  81.         int i;
  82.         printf("请输入8个整数\n");
  83.         for(i=0;i<8;i++)
  84.         {
  85.                 scanf("%d",&data[i]);
  86.         }
  87.         Node *root=NULL; //创建空树
  88.         for(i=0;i<8;i++)
  89.         {
  90.                 root=insert(root,data[i]);
  91.         }
  92.         printf("前序遍历为:\n");
  93.         PreOrderTree(root);
  94.         printf("\n");
  95.         printf("中序遍历为:\n");
  96.         InOrderTree(root);
  97.         printf("\n");
  98.         printf("后序遍历为:\n");
  99.         PostOrderTree(root);
  100.         printf("\n");
  101.         return 0;
  102. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表