二叉树-------二叉链表实现

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 typedef char TelemType;
  4
  5 typedef struct BinTree{
  6     TelemType data;
  7     struct BinTree *LChild;
  8     struct BinTree *RChild;
  9 }BinaryTree;
 10
 11 //
 12
 13
 14 BinaryTree* create_BinaryTree(BinaryTree *T)
 15 {
 16     TelemType tmp;
 17     scanf("%c", &tmp);
 18     if(tmp == ‘0‘)
 19         return 0;
 20
 21     T = (BinaryTree*)malloc(sizeof(BinaryTree));
 22     T->data = tmp;
 23     T->LChild = create_BinaryTree(T->LChild);
 24     T->RChild = create_BinaryTree(T->RChild);
 25     return T;
 26 }
 27
 28 // 计算叶子节点的个数
 29 int sum_left(BinaryTree *T)
 30 {
 31     int sum = 0, lnum, rnum;
 32     if(T)
 33     {
 34         if((!T->LChild) && (!T->RChild))
 35         {
 36             sum++;
 37         }
 38         lnum = sum_left(T->LChild);
 39         sum += lnum;
 40         rnum = sum_left(T->RChild);
 41         sum += rnum;
 42     }
 43     return sum;
 44 }
 45
 46 void preorder_traverse(BinaryTree *T)
 47 {
 48     if(T)
 49     {
 50         printf("%c ", T->data);
 51         preorder_traverse(T->LChild);
 52         preorder_traverse(T->RChild);
 53     }
 54 }
 55
 56 void inorder_traverse(BinaryTree *T)
 57 {
 58     if(T)
 59     {
 60         inorder_traverse(T->LChild);
 61         printf("%c ", T->data);
 62         inorder_traverse(T->RChild);
 63     }
 64 }
 65
 66 void postorder_traverse(BinaryTree *T)
 67 {
 68     if(T)
 69     {
 70         postorder_traverse(T->LChild);
 71         postorder_traverse(T->RChild);
 72         printf("%c ", T->data);
 73     }
 74 }
 75
 76
 77 BinaryTree* get_tree_node(TelemType item, BinaryTree *ltree, BinaryTree *rtree)
 78 {
 79     BinaryTree *T;
 80     T = (BinaryTree*)malloc(sizeof(BinaryTree));
 81     T->data = item;
 82     T->LChild = ltree;
 83     T->RChild = rtree;
 84     return T;
 85 }
 86
 87 BinaryTree* copy_tree(BinaryTree *T)
 88 {
 89     if(!T)
 90         return NULL;
 91     BinaryTree *newltree, *newrtree, *newT;
 92     if(T->LChild)
 93         newltree = copy_tree(T->LChild);
 94     else
 95         newltree = NULL;
 96     if(T->RChild)
 97         newrtree = copy_tree(T->RChild);
 98     else
 99         newrtree = NULL;
100     newT = get_tree_node(T->data, newltree, newrtree);
101     return newT;
102 }
103
104 int max(int n1, int n2)
105 {
106     return (n1 > n2) ? n1 : n2;
107 }
108
109 int get_deep(BinaryTree *T)
110 {
111     int dep = 0, ldep, rdep;
112     if(!T)
113         dep = 0;
114     else
115     {
116         ldep = get_deep(T->LChild);
117         rdep = get_deep(T->RChild);
118         dep = 1 + max(ldep, rdep);
119     }
120 }
121
122 int main()
123 {
124     BinaryTree *bin_tree, *tree;
125     bin_tree = create_BinaryTree(bin_tree);
126     printf("+++++++++++++++++++++++++++++\n");
127     preorder_traverse(bin_tree);
128     puts("");
129     inorder_traverse(bin_tree);
130     puts("");
131     postorder_traverse(bin_tree);
132     puts("");
133     printf("叶子节点个数%d\n", sum_left(bin_tree));
134     printf("树的深度是%d\n", get_deep(bin_tree));
135     tree = copy_tree(bin_tree);
136     preorder_traverse(tree);
137     return 0;
138 }

写在博客上,然后就要开始手写了~~~~~

时间: 2024-12-23 21:26:31

二叉树-------二叉链表实现的相关文章

C#实现二叉树 二叉链表结构

二叉链表存储结构: 二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系. 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址.其结点结构为: 其中,data域存放某结点的数据信息:lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示).利用这样的结点结构表示的二叉树的链式存储结构被称为二叉链表,如图5-8所示. C#实现代码

二叉树的链式存储结构----二叉链表

头文件:head.h #include<string.h> #include<ctype.h> #include<malloc.h> /* malloc()等 */ #include<limits.h> /* INT_MAX等 */ #include<stdio.h> /* EOF(=^Z或F6),NULL */ #include<stdlib.h> /* atoi() */ #include<io.h> /* eof()

数据结构之---C语言实现二叉树的二叉链表存储表示

//二叉树的二叉链表存储表示 //杨鑫 #include <stdio.h> #include <stdlib.h> #define max(a, b) a > b ? a : b //自定义max()函数 typedef char TELemType; //定义结二叉树的构体 typedef struct BTree { TELemType data; struct BTree *lChild; struct BTree *rChild; }BinTree; //二叉树的创

二叉树的二叉链表表示和实现

二叉树的二叉链表存储结构 typedef struct BiTNode { TElemType data; BiTNode * lchild, *rchild;//左右孩子指针 }BiTNode, * BiTree; 二叉链表的22个基本操作 #define ClearBiTree DestroyBiTree//清空二叉树和销毁二叉树的操作一样 void InitBiTree(BiTree &T){ T = NULL; } void DestroyBiTree(BiTree &T){ if

ACMclub 1757 二叉链表存储的二叉树 - from lanshui_Yang

题目描述: 在本题中,将会给出一个按照先序遍历得出的字符串,空格代表空的子节点,大写字母代表节点内容.请通过这个字符串建立二叉树,并按照题目描述中的一种先序遍历和两种中序遍历的算法分别输出每一个非空节点. 输入格式 输入只有一行,包含一个字符串S,用来建立二叉树.保证S为合法的二叉树先序遍历字符串,节点内容只有大写字母,且S的长度不超过100. 输出 共有三行,每一行包含一串字符,表示分别按先序.中序.中序得出的节点内容,每个字母后输出一个空格.请注意行尾输出换行. 样例输入 ABC  DE G

二叉树的链式存储结构--二叉链表

1 二叉树的链式存储结构 //二叉链表的结点结构定义 typedef struct BiTNode { int data; struct BiTNode *lchild; struct BiTNode *rchild; }BiTNode; typedef struct BiTNode *BiTree; 结构示意图如下: 2 二叉树的遍历方法 (1)前序遍历:先访问根结,然后前序遍历左子树,再前序遍历右子树. (2)

二叉链表存储二叉树

链式存储结构 二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系. 通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址.其结点结构为: 其中,data域存放某结点的数据信息:lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示).利用这样的结点结构表示的二叉树的链式存储结构被称为二叉链表,如图5-8所示. (a) 一棵二叉树 

_DataStructure_C_Impl:二叉树的二叉链表存储结构

// _DataStructure_C_Impl: #include<stdio.h> #include<stdlib.h> #define MaxSize 100 typedef char DataType; typedef struct Node{ //二叉链表存储结构类型定义 DataType data; //数据域 struct Node *lchild; //指向左孩子结点 struct Node *rchild; //指向右孩子结点 }*BiTree,BitNode;

二叉树的二叉链表存储

1. 版本信息 (1)CentOS 6.4发行版64位,uname -a 显示如下: Linux localhost.localdomain 3.11.6 #1 SMP Sat Nov 2 23:25:40 KST 2013 x86_64 x86_64 x86_64 GNU/Linux (2)Eclipse: Version: Kepler Service Release 2 (3)Tomcat: apache-tomcat-7.0.53 (4)Mysql:      mysql-server-