用递归中序遍历二叉树

Code:
  1. 用递归中序遍历二叉树  
  2. #include<stdlib.h>  
  3.   
  4. struct tree                //声明树的结构  
  5. {  
  6.      struct tree *left;  
  7.      int data;  
  8.      struct tree *right;  
  9. };  
  10.   
  11. typedef struct tree treenode;  
  12. type treenode *b_tree;             //声明二叉树链表  
  13.   
  14. //插入二叉树的节点  
  15. b_tree insert_node(b_tree root,int node)  //其中root是原来二叉树的跟节点,  
  16. {                                            //node是将要插入的新节点的值  
  17.      b_tree newnode;  
  18.      b_tree currentnode;  
  19.      b_tree parentnode;  
  20.       
  21.      newnode=(b_tree)malloc(sizeof(treenode));     //建立新节点的内存空间  
  22.      newnode->data=node;  
  23.      newnode->right=NULL;  
  24.      newnode->left=NULL;  
  25.   
  26.      if(root=NULL)                        //表示原来的二叉树为空  
  27.           return newnode;  
  28.      else                                //如果不为空的话  
  29.      {   currentnode=root;  
  30.           while(currentnode!=NULL)  
  31.           {   parentnode=currentnode;  
  32.                if( currentnode->data>node)  
  33.                     currentnode=currentnode->left;  
  34.                else   currentnode=currentnode->right;  
  35.           }  
  36.           if(parentnode->data>node)  
  37.                parentnode->left=newnode;  
  38.           else  parentnode->right=newnode;  
  39.      }  
  40.      return root;  
  41. }  
  42.   
  43. // 建立二叉树  
  44. b_tree create_btree(int *data,int len)  
  45. {  
  46.      b_tree root=NULL;  
  47.      int i;  
  48.   
  49.      for(i=0;i<len;i++)  
  50.           root=insert_node(root,data[i]);  
  51.      return root;  
  52. }  
  53.   
  54. //二叉树中序遍历  
  55. void inorder(b_tree point)  
  56. {  
  57.      if(point!=NULL)  
  58.      {  
  59.           inorder(point->left);  
  60.           printf("%d",point->data);  //中序遍历是先左孩子,然后是根节点,最后是有孩子节点  
  61.           inorder(point->right);  
  62.      }  
  63. }  
  64.   
  65. //主程序  
  66. void main( )  
  67. {  
  68.      b_tree root=NULL;  
  69.      int i,index;  
  70.      int value;  
  71.      int nodelist[20];  
  72.      printf("/n pleaase input the elements of binary tree(exit for 0 ):/n");  
  73.      index=0;  
  74.   
  75.      //读取数值存到数组中  
  76.      scanf("%d",&value);  
  77.       
  78.      while(value!=0)  
  79.      {  
  80.           nodelist[index]=value];  
  81.           index=index+1;  
  82.           scanf("%d",&value);  
  83.      }  
  84.      //建立二叉树  
  85.      root=create_btree(nodelist,index);  
  86.   
  87.      //中序遍历二叉树  
  88.      printf("/nThe inorder traversal result is :");  
  89.      inorder(root);  
  90.      printf("/n");  
  91. }  
  92.   
  93.    
  94.   
  95.    
  96.    
  97.   
  98.    
  99.   
  100.    
  101.    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值