二叉树基本操作C代码
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct ChainTree)
struct ChainTree
{
int num;
struct ChainTree *left;
struct ChainTree *right;
};
/*函数功能:进行查找操作。*/
ChainTree *BinTreeFind(ChainTree *bt,int data)//在二叉树中查找值为data的结点。
{
ChainTree *p;
if(bt==NULL)
return NULL;
else
{
if(bt->num==data)
return bt;
else{
if(p=BinTreeFind(bt->left,data))
return p;
else if(p=BinTreeFind(bt->right,data))
return p;
else
return NULL;
}
}
}
/*函数功能:先序遍历。*/
void BinTree_DLR(ChainTree *bt)
{
if(bt)
{
printf("%d",bt->num);
if(bt->left)
{
BinTree_DLR(bt->left);
}
if(bt->right)
{
BinTree_DLR(bt->right);
}
}
return;
}
/*函数定义:后序遍历。*/
void BinTree_LRD(ChainTree *bt)
{
if(bt)
{
BinTree_LRD(bt->left);
BinTree_LRD(bt->right);
printf("%d",bt->num);
}
return;
}
/*函数功能:中序遍历。*/
void BinTree_LDR(ChainTree *bt)
{
if(bt)
{
BinTree_LDR(bt->left);
printf("%d",bt->num);
BinTree_LDR(bt->right);
}
return;
}
/*函数功能初始化一个二叉树,建立根节点。*/
ChainTree *InitRoot()
{
ChainTree *node;
node=(struct ChainTree*)malloc(LEN);
printf("请输入根节点的值:");
scanf("%d",&node->num);
node->left=NULL;
node->right=NULL;
return node;
} /*添加数据到二叉树*/
int BinTreeAddNode(ChainTree *bt,ChainTree *node,int n)
{
if(bt==NULL)
{
printf("\n父结点不在,请先设置父结点。");
return ;
}
switch(n)
{
case :
if(bt->left)
{
printf("左子树结点不为空。");
return ;
}
else
bt->left=node;
break;
case :
if(bt->right)
{
printf("右子树结点不为空。");
return ;
}
else
bt->right=node;
break;
default:
printf("参数错误!\n");
return ;
}
return ;
} /*函数功能:添加结点到二叉树。*/
void AddNode(ChainTree *bt)
{
int data;
int select;
ChainTree *node,*parent;
node=(struct ChainTree*)malloc(LEN);
printf("\n输入二叉树结点数据");
scanf("%d",&node->num);
node->left=NULL;
node->right=NULL;
printf("\n输入父结点数据:");
scanf("%d",&data);
parent=BinTreeFind(bt,data);
if(!parent)
{
printf("\n未找到父结点。");
}
printf("\n1.添加到左子树\n2.添加到右子树\n");
do{
scanf("%d",&select);
if(select==||select==)
BinTreeAddNode(parent,node,select);
}while(select!=&&select!=);
} /*求二叉树叶子结点个数*/
void CountLeaf(ChainTree *bt,int &count)
{
if(bt)
{
if((!bt->left)&&(!bt->right))
count++;
CountLeaf(bt->left,count);
CountLeaf(bt->right,count);
}
} /*求二叉树深度*/
int BinTreeDepth(ChainTree *bt)
{
int dep1,dep2;
if(bt==NULL)
return ;
else
{
dep1=BinTreeDepth(bt->left); //左子树深度(递归调用)
dep2=BinTreeDepth(bt->right); //右子树深度(递归调用)
if(dep1>dep2)
return dep1+;
else
return dep2+;
}
} int main()
{
struct ChainTree *p1,*p2,*head,*p3;
int select = ;
int countleaf=; //该变量计算叶子结点个数
while(select!=){
printf("\n1.设置二叉树根元素\n2.添加二叉树根节点\n3.先序遍历\n4.中序遍历\n5.后序遍历\n6.输出叶子结点个数\n7.求二叉树深度\n0.退出");
scanf("%d",&select);
switch(select)
{
case :
head=InitRoot();
break;
case :
AddNode(head);
break;
case :
BinTree_DLR(head);
break;
case :
BinTree_LDR(head);
break;
case :
BinTree_LRD(head);
break;
case :
countleaf=; //求二叉树叶子结点数
CountLeaf(head,countleaf);
printf("\n%d",countleaf);
break;
case :
printf("二叉树深度为:%d\n",BinTreeDepth(head));
break;
case :
select = ;
break;
}
}
}
二叉树基本操作C代码的更多相关文章
- c++学习笔记—二叉树基本操作的实现
用c++语言实现的二叉树基本操作,包括二叉树的创建.二叉树的遍历(包括前序.中序.后序递归和非递归算法).求二叉树高度,计数叶子节点数.计数度为1的节点数等基本操作. IDE:vs2013 具体实现代 ...
- 编程算法 - 二叉树的深度 代码(C)
二叉树的深度 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一棵二叉树的根节点, 求该树的深度. 依次选择最深的左右子树, 然后递归加1. ...
- 编程算法 - 推断二叉树是不是平衡树 代码(C)
推断二叉树是不平衡树 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一颗二叉树的根结点, 推断该树是不是平衡二叉树. 二叉平衡树: 随意结 ...
- 二叉树基本操作C++
#include <cstdio> #include <climits> #include <cassert> #include <iostream> ...
- c语言二叉树基本操作
编译器为vs2013 #include "stdafx.h" #include<malloc.h> #include<stdlib.h> #define O ...
- [c/c++]c++控制台操作(基本操作的代码)
本文转自:http://blog.csdn.net/stude/article/details/7645056 控制台窗口界面编程控制 〇.摘要一.概述二.控制台文本窗口的一般控制步骤三.控制台窗口操 ...
- OC MRC之计数器的基本操作(代码分析)
/* 1.方法的基本使用 1> retain :计数器+1,会返回对象本身 2> release :计数器-1,没有返回值 3> retainCount :获取当前的计数器 4> ...
- python scrapy 基本操作演示代码
# -*- coding: utf-8 -*- import scrapy # from quotetutorial.items import QuoteItem from quotetutorial ...
- Html基本操作实例代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD ...
随机推荐
- js进阶 9-14 js如何实现下拉列表多选移除
js进阶 9-14 js如何实现下拉列表多选移除 一.总结 一句话总结: 1.js如何实现下拉列表多选移除? 把这个下拉列表中的option移除,然后加到另外一个下拉列表(文字)中去.remove方法 ...
- Java冒泡排序与直接选择排序代码随笔
冒泡排序:延申的有很多种,有的是先确定最大值放到后面,有的是先确定最小值放到前边,还有就是反过来,先确定最小值的位置,但是本质都是:不断两两比较,交换位置...第一趟确定一个最大(最小)值放到前边(后 ...
- 如何在华为云软件开发云上运行Python
一. 华为云软件开发云与Python 1. 华为云软件开发云简介 华为云软件开发云(DevCloud)是集华为近30年研发实践,前沿研发理念,先进研发工具为一体的一站式云端DevOps平台,面向开发者 ...
- 报错:Unsupported major.minor version 52.0 (jar包对不同JDK版本的兼容性问题:)
Unsupported major.minor version 52.0 这类错误是因为Java版本不一致造成的,在高版本的JDK(1.8)环境中编译JAR包,然后JAR在低版本的JVM(1.6)中运 ...
- base64编码转图片
protected void Button1_Click(object sender, EventArgs e) { //strImg为base64编码的图片字符串 string strImg = & ...
- Android studio中的6大布局
1.相对布局代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns: ...
- java学习笔记(2)——函数
int a = 1; a = a++; 1,取出a的值1作为a++表达式的值(a++表达式等于1) 2,a增加1变为2 3,执行赋值运算,a++表达式的值再赋给a,a又成为了1. ---------- ...
- hdu1180奇怪的楼梯……bfs迷阵……wa该16二级,我太渣滓
#include<iostream> #include<queue> #include<cstring> using namespace std; int row, ...
- Linux性能测试 /proc目录
/proc文件系统 - 各种内核信息/proc目录下文件提供了很多不同硬件设备和内核的详细信息.更多详情参见Linux kernel /proc.一般/proc例如: [root@SM155 proc ...
- WPF 圆角textbox
原文:WPF 圆角textbox 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a771948524/article/details/9245965 ...