C语言二叉排序树的创建
来源:互联网 发布:可以看耽美小说的软件 编辑:程序博客网 时间:2024/06/04 20:13
在实际应用中,很多场合会涉及到数据结构中的树,二叉树作为最简单的树,则有很多重要的用处。而二叉树又细分为好多类型,在此只说二叉排序树,这种类型的树有个比较好的特性就是,中序遍历这棵树,你将得到一个按升序排列的数组。下面以一维数组来创建一棵二叉排序树。
#include "stdafx.h"#include <iostream>#include <vector>using namespace std;typedef struct Tree{int Data;struct Tree *LeftTree;//左子树struct Tree *RightTree;//右子树}TreeNode, *TreeNodeP;void InsertNode(TreeNodeP &TreeRoot, int Data){//新建一个节点TreeNodeP NodeP;NodeP = (TreeNodeP)malloc(sizeof(TreeNode));NodeP->Data = Data;NodeP->LeftTree = NodeP->RightTree = NULL;//如果树根还没创建,那就把当前新建的节点赋给根吧if (TreeRoot == NULL){TreeRoot = NodeP;}//新插入的节点数值比根的小或等,走根的左边else if (Data <= TreeRoot->Data){//左子树递归结束处if (TreeRoot->LeftTree == NULL)TreeRoot->LeftTree = NodeP;//左递归elseInsertNode(TreeRoot->LeftTree, Data);}//新插入的节点数值比根的大,走根的右边else if (Data > TreeRoot->Data){//右子树递归结束处if (TreeRoot->RightTree == NULL)TreeRoot->RightTree = NodeP;//右递归elseInsertNode(TreeRoot->RightTree, Data);}}void TraveseTreeNode(TreeNodeP TreeRoot, int Mode){if (TreeRoot){//先序遍历if (Mode == 1){printf("NodeData=%d\n", TreeRoot->Data);TraveseTreeNode(TreeRoot->LeftTree, Mode);TraveseTreeNode(TreeRoot->RightTree, Mode);}//中序遍历else if (Mode == 2){TraveseTreeNode(TreeRoot->LeftTree, Mode);printf("NodeData=%d\n", TreeRoot->Data);TraveseTreeNode(TreeRoot->RightTree, Mode);}//后序遍历else if (Mode == 3){TraveseTreeNode(TreeRoot->LeftTree, Mode);TraveseTreeNode(TreeRoot->RightTree, Mode);printf("NodeData=%d\n", TreeRoot->Data);}}}int main(){TreeNodeP Tree = NULL;int A[11] = { 1, 6, 18, 3, 7, 17, 20, 2, 4, 13, 9 };for (int i = 0; i < 11; i++){InsertNode(Tree, A[i]);}TraveseTreeNode(Tree, 2);return 0;}运行程序,将得到:1 2 3 4 6 7 9 13 17 18 20 。不过二叉排序树有个不好的方面是,每个节点上左右树的深度可能差别比较大,比如有个数组为 1 2 3 4 6 7 9 13 17 18 20,它的树就是1→ 2 →3→4→ 6→→9→13→17→18→20
这棵树根本没左子树啥事。即节点上的左右子树的深度失衡,这个问题将由平衡二叉树来解决。后面有时间写一下。
阅读全文
0 0
- C语言二叉排序树的创建
- 创建二叉排序树C语言实现
- c语言:二叉排序树的实现
- C语言二叉排序树的实现
- 二叉排序树的操作(C语言)
- C语言实现二叉排序树的相关操作
- 二叉排序树 C语言实现
- C语言实现二叉排序树
- 二叉排序树的创建
- 二叉排序树的创建
- 二叉排序树的创建
- 二叉排序树的创建
- 二叉排序树C语言实现一
- 二叉排序树C语言实现二
- 二叉排序树的建立以及相关操作 C语言
- 二叉排序树(BST)的思路及C语言实现
- C语言实现二叉排序树的增删查操作
- C语言实现二叉排序树的基本运算算法
- go语言学习笔记(10) 错误处理
- OSI 七层模型及各层功能
- 【Unity3d】简单的UGUI序列帧播放
- 我自己30岁前的理想规划
- 在Perl中使用Getopt::Long模块来接收用户命令行参数
- C语言二叉排序树的创建
- String 的各种方法
- linux挂载指令
- Python学习笔记 --- 实现日志管理服务
- WebService中的wsdl文件作用是什么?
- 当web前端架构方案遇上《金瓶梅》?!
- 内存泄露
- C#基础 数组的认识、学习、与使用
- 贪心算法_活动选择问题