好长时间没碰这东西了,今天复习了一下。发现编程功力还是有点提升的,撸出来也没有花多少功夫,不过貌似有点鸡肋。。。。哈哈

#include <stdio.h>
#include <stdlib.h>
struct BinaryTree{struct BinaryTree *left;struct BinaryTree *right;int data;int count;
};
//create node
struct BinaryTree* createNode(int data){struct BinaryTree *node=(struct BinaryTree*)malloc(sizeof(struct BinaryTree));  //alloc memory//set the nodenode->left=NULL;node->right=NULL;node->data=data;node->count=1;return node;   //return
}
//insert node
void insertNode(struct BinaryTree *node,int data){if(data==node->data){printf("same haha\n");node->count++;return;}//go leftif(data<node->data){//if left==NULLif(node->left==NULL){node->left=createNode(data);  //create a new nodereturn;}elseinsertNode(node->left,data);}//go rightif(data>node->data){if(node->right==NULL){  //if the right node is NULLnode->right=createNode(data); return;}elseinsertNode(node->right,data);  //go on}
}
//delete node
void deleteNode(struct BinaryTree *node){if(node->left!=NULL)deleteNode(node->left);if(node->right!=NULL)deleteNode(node->right);free(node);node=NULL;
}
//preorder traversal
void first_scan(struct BinaryTree *node){if(node->count==1)printf("%d ",node->data);elsefor(int i=0;i<node->count;i++)printf("%d ",node->data);if(node->left!=NULL)first_scan(node->left);if(node->right!=NULL)first_scan(node->right);
}
//inorder traversal
void inorder_scan(struct BinaryTree *node){if(node->left!=NULL)inorder_scan(node->left);if(node->count==1)printf("%d ",node->data);elsefor(int i=0;i<node->count;i++)printf("%d ",node->data);if(node->right!=NULL)inorder_scan(node->right);
}
//postorder traversal
void postorder_scan(struct BinaryTree *node){if(node->left!=NULL)inorder_scan(node->left);if(node->right)inorder_scan(node->right);if(node->count==1)printf("%d ",node->data);elsefor(int i=0;i<node->count;i++)printf("%d ",node->data);
}int main(int argc,char **argv){struct BinaryTree *root=NULL; //root nodeint num=65533;while((scanf("%d",&num))!=EOF){if(root==NULL)   //if the root node is nullroot=createNode(num);elseinsertNode(root,num);}//inorder traversalprintf("\n---------------inorder traversal-----------------\n");inorder_scan(root);//postorder traversalprintf("\n---------------postorder traversal-------------------\n");postorder_scan(root);printf("\n---------------preorder traversal-------------------\n");first_scan(root);//free the memorydeleteNode(root);return 0;
}

以上

随手写了一个鸡肋的二叉树相关推荐

  1. Java 随手写的一个英语单词练习器

    1.导入英文单词: 2.随机选取若干单词提问: 3.终端输入单词,判断是否作对: 4.得分显示: import java.util.*;/*** @author Victor.Chang* @date ...

  2. 写了一个简单的计算父亲节母亲节等日期的方法

    项目中要查父亲节,母亲节的节日,随手写了一个小方法,记录一下. //可以用来计算父亲节 母亲节 感恩节等 //计算比如父亲节母亲节感恩节这种某个月的第几个周几的情况 private static St ...

  3. 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...

    已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...

  4. 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)

    给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...

  5. 给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构(算法导论第十章10.4-3)

    给定一个n节点的二叉树,写出一个O(n)时间非递归过程,将该树每个节点关键字输出,可以使用一个栈作为辅助数据结构 (算法导论第十章10.4-3) template<typename T> ...

  6. 给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出(算法导论第十章10.4-2)

    给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出 (算法导论第十章10.4-2) #include <iostream> template<typena ...

  7. 怎样写出一个较好的高速排序程序

    写出一个较好的高速排序程序 高速排序是经常使用的排序算法之中的一个,但要想写出一个又快又准的使用程序,就不是那么简单了 须要注意的事项 首先要写正确.通常使用递归实现.其递归相当于二叉树展开,因此假设 ...

  8. 如何写出一个较好的快速排序程序

    写出一个较好的快速排序程序 快速排序是常用的排序算法之一,但要想写出一个又快又准的使用程序,就不是那么简单了 需要注意的事项 首先要写正确.通常使用递归实现.其递归相当于二叉树展开,因此如果要用迭代实 ...

  9. 分享一个横向打印二叉树图形的方法

    最近想起之前大二学数据结构时测试B树时写了一个打印二叉树的C语言函数,现在突然想把它记录一下,改成打印二叉树的Java实现 效果 上图的二叉树打印效果如下 解释一下这个图,将图顺时针旋转90°,看见有 ...

  10. React自己写的一个地图小组件

    由于今天比较闲,就玩了玩react,然后就封装了一个地图的组件,当然功能比较简单,因为就是随手写的小东西,但是由于引用了百度API和bee-mobile,所以用起来可能要薛微麻烦一点点,但是我保证,只 ...

最新文章

  1. [转载] sql server 2000系统表解释
  2. 【Linux入门到精通系列讲解】工具——make/Makefile
  3. 手把手教你使用TF服务将TensorFlow模型部署到生产环境
  4. UNITY IMGUI
  5. 微软、UIUC韩家炜组联合出品:少样本NER最新综述
  6. sql语句,怎么取查询结果的位置
  7. 树的非递归(前序,中序,后序)
  8. 使用Scrapy,帮你快速抓取网页数据(代码可下载)!
  9. pandas -读取文件时,加入列索引
  10. android下md5加密
  11. 登录注册HTML页面代码
  12. 提取unity3d游戏资源文件
  13. 红米K40 Pro/Pro+ 使用Fastboot安装欧版ROM (非TWRP)
  14. cad在线转换低版本_资源分享/CAD版本转换器
  15. 玻利亚(Polya)的《怎样解题》
  16. 软考-嵌入式系统设计师-笔记:嵌入式系统软件基础知识
  17. SLA/LCD/DLP光固化3D打印原理分析!
  18. 机顶盒(Iptv)EPG页面实现视频播放
  19. 网易公司创始人兼CEO丁磊:独家版权偏离了传播的初衷,已陷入资本运作的怪圈...
  20. 【读书笔记】《引爆点》巴尔科姆•格拉德威尔

热门文章

  1. android连接php还是asp,ASP或PHP如何判断是从电脑还是手机客户端访问页面的思路...
  2. Docker 目录/var/lib/docker/containers文件过大
  3. 桌面窗口管理器占用过高解决办法
  4. 计算机考研833大纲,考研833之计算机组成与系统结构提纲
  5. 数据库DataBase
  6. DLL和EXE如何读取包含在自身的资源文件
  7. Python动态网页爬取
  8. MAC下显示隐藏文件夹
  9. B站CEO陈睿:我们活跃用户仍维持高增长 动能是独特优质内容
  10. watch蜂窝开通服务器中断,原因找到了!Apple Watch Series 3为何无法连接蜂窝网络...