二叉树--结构体
//========================================//
//程序名称:利用结构体建立二叉树 //
//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++实现平衡二叉树时,我们需要定义一个二叉树节点结构体,包括节点值、颜色(对于红黑树)以及指向左子节点和右子节点的指针。接着,我们需要实现基本操作如插入、删除和查找,以及在这些操作后进行的平衡调整(如...
在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语言的指针和结构体特性使得我们可以直接构建和操作二叉树、堆和图的节点,实现动态内存分配和数据的高效存储。 总的来说,这个实验涵盖了数据结构中三个重要的部分,通过C语言的实现,加深了对这些概念的理解,...
在C语言中,实现二叉树通常涉及定义一个结构体来表示节点,这个结构体至少包含两个指针,分别指向左右子节点,以及可能存储的数据。例如: ```c typedef struct Node { int data; struct Node* left; struct ...
红黑二叉树的结构体定义: ```c typedef struct RedBlackNode { int data; char phone[12]; char name[12]; color_t color; RedBlackNode *left; RedBlackNode *right; RedBlackNode *parent; } RedBlackNode...
在C语言中实现线索二叉树,首先需要定义一个结构体来表示二叉树的结点,结构体包括左孩子、右孩子、前驱线索和后继线索四个指针,以及存储数据的域。例如: ```c typedef struct Node { int data; struct Node* ...
在C语言中实现二叉树,我们需要定义一个结构体来表示节点,通常包含三个部分:数据、左子节点指针和右子节点指针。例如: ```c typedef struct TreeNode { int data; struct TreeNode* left; struct TreeNode* ...
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* ...
具体来说,可以定义一个结构体`BiTreeNode`,它包含如下成员: - `char data;` —— 存储节点数据,这里为字符类型。 - `BiTreeNode *left_child;` —— 指向左子节点的指针。 - `BiTreeNode *right_child;` —— ...
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`: 节点的...
- 定义二叉树节点的结构体Node,以及二叉树的类型BiTree。 - 定义队列结构,用于二叉树的层次遍历。 - 定义栈结构,用于二叉树的递归遍历和操作。 5. 二叉树相关操作的具体实现: - 先序遍历建立二叉树的函数...
为了实现题目要求的功能,我们首先需要定义一个二叉树节点的结构体 `Node`,其中包含三个成员变量: - `char data;`:用于存储节点的数据,题目中指定数据类型为字符型。 - `Node *lchild;`:指向左子节点的指针。 -...