首页 > 代码库 > 数据结构学习---二叉树简单实现
数据结构学习---二叉树简单实现
想必二叉树大家都很熟悉。结点有左右孩子,二叉树非常使用,编写二叉树和链表差不多,多多运用迭代就能很好的解决问题,但是这仅仅限于在量比较小的情况下,非递归的代码执行效率大家有目共睹。
#ifndef _TREENODE_H_ #define _TREENODE_H_ typedef int Elemtype; typedef struct treeNode{ Elemtype tRoot; struct treeNode * pLight; struct treeNode * pRight; }treeNode; #endif
定义结构体还是差不多的。
#include<stdio.h> #include"treeNode.h" void show(treeNode * pNode) { if(NULL == pNode) return; printf("%d - ",pNode->tRoot); show(pNode->pLight); show(pNode->pRight); }
先根,中根,后根就是把printf放到不同的位置。
/************************************************************************* > File Name: InitHead.c > Author: aaron > Mail: 60360329@163.com > Created Time: Fri 17 Mar 2017 04:33:21 PM CST ************************************************************************/ #include<stdio.h> #include"treeNode.h" #include<string.h> #include<stdlib.h> treeNode * InitHead(Elemtype data) { treeNode * pNode = (treeNode *)malloc(sizeof(treeNode)); if (NULL != pNode) { pNode->tRoot = data; pNode->pLight = NULL; pNode->pRight = NULL; } return pNode; }
初始化头结点。最好的写在一起的还有带销毁的。
/************************************************************************* > File Name: createTree.c > Author: aaron > Mail: 60360329@163.com > Created Time: Fri 17 Mar 2017 03:05:37 PM CST ************************************************************************/ #include<stdio.h> #include"treeNode.h" #include<stdlib.h> #include"Fun.h" treeNode * recursion(treeNode * pNode,Elemtype * INdata) { if (NULL == pNode) { treeNode * qtmp = InitHead(*INdata); return qtmp; } else if (*INdata > pNode->tRoot) { pNode->pLight = recursion(pNode->pLight,INdata); return pNode; //起先这里没加 } else { pNode->pRight = recursion(pNode->pRight,INdata); return pNode; //这里同样 } } treeNode * createTree(treeNode * pNode,Elemtype * INdata) { if (NULL == pNode ||NULL == INdata) { return pNode; } recursion(pNode,INdata); return pNode; }
(二叉排序树)这里我碰到了一个我自己看了好久的问题。上面有地方没加return 只有一个函数出口,导致递归的时候超过三个结点插入的时候,只能插在不超过三个三层的位置。后来我看了一下,递归了好几层都只有在第一层这个出口这里,所以解决问题的方法是在每次调用递归函数的时候加出口。
-----------------后补上非递归二叉排序树。2017-03-1911:42:19
数据结构学习---二叉树简单实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。