二叉树的建立删除及三种遍历实现

二叉树的建立、删除及三种遍历的C++实现

教材上的Tree类写法太累赘,不实用,将树节点直接写成结构体即可

要理解结点的含义以及根结点的重要意义

[cpp]  view plain copy
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. //用CPP文件编写,否则编译出错,需要加struct且delete不识别  
  4. struct TreeNode {  
  5.     int val;  
  6.     TreeNode * left, * right;  
  7. };  
  8. TreeNode * insertTree(TreeNode * root,int val){//insert new node,return root  
  9.     TreeNode * newNode;  
  10.     if (root == NULL)  
  11.     {  
  12.         newNode = new TreeNode;  
  13.         newNode -> val = val;  
  14.         newNode -> left = NULL;  
  15.         newNode -> right = NULL;  
  16.         return newNode;  
  17.     }  
  18.       
  19.     if (val < root ->val)  
  20.         root ->left = insertTree(root ->left,val);  
  21.     else   
  22.         root ->right = insertTree(root ->right,val);  
  23.     return root;  
  24. }  
  25. void delTree(TreeNode * root){  
  26.     if(root -> left != NULL) delTree(root -> left);  
  27.     if(root -> right != NULL) delTree(root ->right);  
  28.     delete root;  
  29.     return;  
  30. }  
  31. void FLRTraverse(TreeNode * root) {//先序遍历  
  32.     printf("%d/n",root -> val);  
  33.     if(root -> left != NULL) FLRTraverse(root -> left);  
  34.     if(root -> right != NULL) FLRTraverse(root -> right);  
  35.     return;  
  36. }  
  37. void LFRTraverse(TreeNode * root) {//中序遍历  
  38.     if(root -> left != NULL) LFRTraverse(root -> left);  
  39.     printf("%d/n",root -> val);  
  40.     if(root -> right != NULL) LFRTraverse(root -> right);  
  41.     return;  
  42. }  
  43. void LRFTraverse(TreeNode * root) {//后序遍历  
  44.     if(root -> left != NULL) LRFTraverse(root -> left);  
  45.     if(root -> right != NULL) LRFTraverse(root -> right);  
  46.     printf("%d/n",root -> val);  
  47.     return;  
  48. }  
  49. void main(){  
  50.     //始终记住根是对树而言最重要的结点  
  51.     FILE * fin;  
  52.     TreeNode *root;  
  53.     int val;  
  54.     fin =  fopen("data.txt","r");  
  55.     root = NULL;  
  56.     while(fscanf(fin,"%d",&val) != EOF) root = insertTree(root,val);  
  57.     fclose(fin);  
  58.     printf("先序遍历:/n");  
  59.     FLRTraverse(root);  
  60.     printf("/n");  
  61.       
  62.     printf("中序遍历:/n");  
  63.     LFRTraverse(root);  
  64.     printf("/n");  
  65.     printf("后序遍历:/n");  
  66.     LRFTraverse(root);  
  67.     printf("/n");  
  68.     delTree(root);  
  69.     return;  
  70. }  
  71. http://blog.csdn.net/yangliuy/article/details/6012802

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值