`
weihe6666
  • 浏览: 437179 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

二叉树--结构体

阅读更多
二叉树--结构体

//========================================//
//程序名称:利用结构体建立二叉树          //
//Written By HEWEI                        //
//2011 05 30                              //
//========================================//
#include<iostream>
using namespace std;

#define  MAX 20
//定义存储二叉树节点的结构体
struct tree
{
	int left;
	int Data;
	int right;
};

//自定义结构体类型
//typedef tree treenode;
//treenode b_tree[MAX];
tree b_tree[MAX];
//公共数组
int nodelist[MAX];

//--------------------------------------//
//---------建立二叉树-------------------//
//--------------------------------------//
void Create_Tree(int nIndex)
{
	int i;
	int level;  //树的阶层数
	int Position;//左树为-1,右树为1

	b_tree[1].Data = nodelist[0];
	for(i = 1; i< nIndex; i++)
	{
		//以i为索引,将nodelist[i]中的数据存入二叉树,并找到它的上一级元素,将此索引存入上一级元素的left or right
		b_tree[i +1].Data = nodelist[i];
		level = 1;
		Position = 0;

		while(Position == 0)
		{
			//nodelist[i]应该在那个索引
			if(nodelist[i] >= b_tree[level].Data)  //右树
			{
				//判断是否有子节点
				if(b_tree[level].right != -1)  //有子节点
				    level = 2*level +1;
				else 
					Position = 1;
			}
			else  //左树
			{
				//判断是否有子节点
				if(b_tree[level].left != -1) //有左节点
				    level = 2* level;
				else
					Position = -1;
			}
		}

		if(Position == -1) //左树
			b_tree[level].left = i;
		else
			b_tree[level].right = i;
	}
}

//---------------------------------------//
//-------------存储输入元素--------------//
//---------------------------------------//
void Store_Data(int nIndex)
{
	int temp;
	int i;

	for(i=0; i <nIndex;i++)
	{
		cout << "Please Input the Data => ";
		cin >> temp;
		nodelist[i] = temp;
	}
}
int main(void)
{

	int capacity ; //输入数据的容量  
	//初始化struct为0  
	for(int i = 0; i < MAX; i++)  
	{  
		b_tree[i].left = -1;
		b_tree[i].Data = 0;
		b_tree[i].right = -1;
	}  

	//存储输入的数据  
	cout <<"Please Input the capacity : ";  
	cin >> capacity;  
	cout << endl;  
	Store_Data(capacity);  
	//建立二叉树  
	Create_Tree(capacity);  

	//输出数组和二叉树的元素  
	cout <<"Output the content Data of NodeList : " << endl; 
	for(int i= 0; i <capacity; i++)
	{
		cout << nodelist[i] << " ";
	}
	cout << endl;  
	cout <<"Output the content Data of b_tree : " << endl;  
	cout <<"==============================\n";
	for(int i = 1; i<= MAX; i++)
	{
		cout  << (i-1) << ":  [" << b_tree[i].left<<"]";
		cout <<"  [" << b_tree[i].Data <<"]";
		cout << "  [" << b_tree[i].right <<"]";
		cout << endl;
	}
	return  0;
}
分享到:
评论

相关推荐

    数据结构--二叉树--线索化二叉树

    在实现时,可能需要定义一个二叉树节点结构体,包含数据域、左右子节点指针以及线索标志位。然后编写一个函数来遍历二叉树并进行线索化,另一函数实现非递归的中序遍历。 `中序线索化二叉树示例输入输出.jpg`文件...

    结构体 二叉树 操作算法

    ### 结构体与二叉树操作算法 #### 一、概述 本文档主要介绍了一个使用C语言实现的二叉树数据结构及其相关的操作算法。在计算机科学领域,二叉树是一种重要的非线性数据结构,它由节点组成,每个节点最多有两个子...

    二叉树-基于C++实现的平衡二叉树.zip

    C++实现平衡二叉树时,我们需要定义一个二叉树节点结构体,包括节点值、颜色(对于红黑树)以及指向左子节点和右子节点的指针。接着,我们需要实现基本操作如插入、删除和查找,以及在这些操作后进行的平衡调整(如...

    二叉树-基于C++实现的二叉树操作.zip

    在C++中,我们可以使用结构体或类来表示二叉树的节点。例如,创建一个名为`Node`的类: ```cpp class Node { public: int data; Node* left; Node* right; Node(int value) : data(value), left(nullptr), ...

    打印二叉树-按照二叉树的形状打印

    实际编写代码时,你需要定义二叉树节点的结构体或类,以及实现相应的遍历函数。如果需要更详细的代码示例,可以参考以下基本结构: ```cpp #include #include struct Node { int value; Node* left; Node* ...

    基于C语言实现二叉树-堆-图(数据结构实验)【100012026】

    C语言的指针和结构体特性使得我们可以直接构建和操作二叉树、堆和图的节点,实现动态内存分配和数据的高效存储。 总的来说,这个实验涵盖了数据结构中三个重要的部分,通过C语言的实现,加深了对这些概念的理解,...

    二叉树-基于C语言实现的二叉树基本操作.zip

    在C语言中,实现二叉树通常涉及定义一个结构体来表示节点,这个结构体至少包含两个指针,分别指向左右子节点,以及可能存储的数据。例如: ```c typedef struct Node { int data; struct Node* left; struct ...

    数据结构-b类-红黑二叉树-毕业论文.doc

    红黑二叉树的结构体定义: ```c typedef struct RedBlackNode { int data; char phone[12]; char name[12]; color_t color; RedBlackNode *left; RedBlackNode *right; RedBlackNode *parent; } RedBlackNode...

    数据结构之线索二叉树-C语言实现.pdf

    在C语言中实现线索二叉树,首先需要定义一个结构体来表示二叉树的结点,结构体包括左孩子、右孩子、前驱线索和后继线索四个指针,以及存储数据的域。例如: ```c typedef struct Node { int data; struct Node* ...

    二叉树-基于C语言实现的二叉树动态可视化打印.zip

    在C语言中实现二叉树,我们需要定义一个结构体来表示节点,通常包含三个部分:数据、左子节点指针和右子节点指针。例如: ```c typedef struct TreeNode { int data; struct TreeNode* left; struct TreeNode* ...

    二叉树-基于C++实现的平衡二叉树的旋转.zip

    4. **C++实现**:在C++中,平衡二叉树的实现通常涉及定义节点结构体(包含值、左右子节点指针以及平衡因子),并实现插入、删除和旋转等操作。平衡因子是节点的左子树高度减去右子树高度,用于判断是否需要旋转。 5...

    求二叉树的深度

    在C语言中,可以定义一个结构体来表示二叉树的节点,例如: ```c typedef struct BiTNode { char data; struct BiTNode *lchild, *rchild; } BiTNode, *BiTree; ``` ### 求解二叉树深度 二叉树的深度是指从根...

    二叉树实现-二叉树操作

    在C++中,我们首先需要定义一个二叉树节点结构体或类。这通常包括一个数据成员来存储节点值,以及两个指针成员分别指向左子节点和右子节点。 ```cpp struct TreeNode { int val; TreeNode* left; TreeNode* ...

    数据结构实验报告6-树-二叉树的遍历算法-实验内容及要求.docx

    具体来说,可以定义一个结构体`BiTreeNode`,它包含如下成员: - `char data;` —— 存储节点数据,这里为字符类型。 - `BiTreeNode *left_child;` —— 指向左子节点的指针。 - `BiTreeNode *right_child;` —— ...

    按二叉树的形状打印二叉树后端- C

    typedef struct Node//定义一个二叉树结点的结构体 { char data; //每个结点的数值 int num; //数没个结点的编号 struct Node * LChild; struct Node * RChild; }BiTNode,* BiTree; int a=0; void CreateBiTree...

    数据结构上机实习 唯一确定一颗二叉树

    - 使用结构体 `Treenode` 来定义二叉树的节点,包含数据域和左右子节点指针。 - 使用类 `Tree` 来管理整个二叉树,包含根节点指针和数据类型。 ##### 4.2 类的成员函数 - `createTree`:根据前序和中序序列创建...

    二叉树的建立

    在C语言中,可以通过定义结构体来表示一个二叉树节点。给定代码中,定义了一个名为`BinTreeNode`的结构体,其中包含以下字段: - `char data`: 存储节点的数据(这里使用了`char`类型)。 - `DataType info`: 节点的...

    题目整理(二叉树).pdf

    - 定义二叉树节点的结构体Node,以及二叉树的类型BiTree。 - 定义队列结构,用于二叉树的层次遍历。 - 定义栈结构,用于二叉树的递归遍历和操作。 5. 二叉树相关操作的具体实现: - 先序遍历建立二叉树的函数...

    求度为2的结点个数-二叉树

    为了实现题目要求的功能,我们首先需要定义一个二叉树节点的结构体 `Node`,其中包含三个成员变量: - `char data;`:用于存储节点的数据,题目中指定数据类型为字符型。 - `Node *lchild;`:指向左子节点的指针。 -...

Global site tag (gtag.js) - Google Analytics