链表-二叉树
//========================================//
//程序名称:利用链表建立二叉树 //
//Writtrn By HEWEI //
//2011 05 31 //
//========================================//
#include<iostream>
using namespace std;
#define MAX 20
//-----------------------------------------//
//----------定义链表结构-------------------//
//-----------------------------------------//
struct tree
{
struct tree *left; //左树节点
int Data; //数据
struct tree *right; //右树节点
};
typedef struct tree treenode;
typedef treenode *b_tree;
//-----------------------------------------//
//-----------二叉树节点的插入--------------//
//-----------------------------------------//
b_tree Insert_Tree(b_tree root,int data)
{
b_tree New;
//b_tree Pointer;//节点指针
b_tree currentnode; //当前节点
//b_tree parentnode; //父节点
//allocate memory to New
New = new treenode[sizeof(treenode)];
//初始化新的节点
New->left = NULL;
New->Data = data;
New->right = NULL;
//按照树的结构,左小右大
//建立根节点
if(root == NULL)
{
root = New;
}
else
{
//判断此值和root值得大小,左子树和右子树
currentnode = root ;//当前节点
while(currentnode != NULL)
{
//寻找左子树
if (data <= currentnode->Data)
{
//判断是否有子节点
if(currentnode->left != NULL)//有子节点
{
currentnode = currentnode->left; //将当前节点向下移动
}
else //无子节点
{//赋值给当前节点
//parentnode = currentnode;
//currentnode = currentnode->left;
break;
}
}
else//右子树
{
//寻找右子树
//判断是否有子节点
if(currentnode->right != NULL)//有子节点
{
//parentnode = currentnode;
currentnode = currentnode->right; //将当前节点向下移动
}
else //无子节点
{
//parentnode = currentnode;
//parentnode->right = New; //赋值给当前节点
//currentnode = currentnode->right;
break;
}
}
}
//if(data <= parentnode->Data) //左子树
// parentnode->left = New;
//else
// parentnode->right = New;
if(data <= currentnode ->Data) //左子树
currentnode ->left = New;
else
currentnode ->right = New;
}
return root;
}
//------------------------------------------//
//-------------二叉树的建立-----------------//
//------------------------------------------//
b_tree Create_Tree(int len,int *pArray)
{
int i;
//根节点的声明
b_tree root = NULL;
//插入左右子树
for(i=0; i< len; i++)
{
root = Insert_Tree(root,pArray[i]);
}
return root;
}
//-------------------------------------------//
//-----------存储数值------------------------//
//-------------------------------------------//
void Store_Data(int nMaxIndex,int *pArray)
{
int i ;
int temp;
for(i = 0; i <nMaxIndex; i++)
{
cout << "Please Input the Data => ";
cin >> temp;
pArray[i] = temp;
}
}
//-------------------------------------------//
//------------打印二叉树前序遍历------------//
//-------------------------------------------//
void Print_Tree(b_tree point)
{
if(point != NULL)
{
cout <<point->Data;
Print_Tree(point->left);//打印左节点
Print_Tree(point->right);//打印右节点
}
}
//--------------------------------------------//
//---------------主程序-----------------------//
//--------------------------------------------//
int main(void)
{
b_tree root = NULL; //声明根节点
int i,index,capacity;
int value;
int nodelist[MAX];
//读取数值到数组中
cout <<"Please Input the capacity : ";
cin >> capacity;
cout << endl;
Store_Data(capacity,nodelist);
//建立二叉树
root = Create_Tree(capacity,nodelist);
//遍历二叉树
Print_Tree(root);
return 0;
}
分享到:
相关推荐
"算法大全-面试题-链表-栈-二叉树-数据结构"这个压缩包文件提供了丰富的知识资源,旨在帮助学习者深入理解和应用这些核心概念。 链表是一种线性数据结构,与数组不同,它的元素在内存中不是连续存储的。链表由一...
"c++算法集-排序-链表-图-队列-二叉树实现"这个压缩包包含了C++语言实现的一些核心数据结构和算法,这些都是计算机科学的基础。 首先,我们来详细探讨排序算法。排序是计算机科学中最基本的操作之一,它涉及将一组...
以上就是针对链表、栈、二叉树以及数据结构的一些常见面试题及其解题思路。这些知识点在实际的软件开发和算法设计中都有着广泛的应用。掌握这些基本操作和算法,对于提升编程能力和解决复杂问题的能力至关重要。
这里可能包括单链表、双向链表、循环链表等不同类型的链表实现,以及链表的基本操作,如插入、删除、查找等。链表的理解和操作是数据结构学习的基础。 接着是"二叉树"。二叉树是最简单但又非常重要的非线性数据结构...
数据结构C语言版-二叉树的三叉链表存储表示.doc
运用二叉链表实现二叉树的基本操作,包括:创建二叉树的存储结构、复制已有的二叉树、计算已有的二叉树的深度、先根序序列、中根序序列、后根序序列等。 输入格式:AB#C##D## 二、实验目的 掌握二叉链表及二叉树的...
基于二叉链表的二叉树,实现了二叉树的多种操作:添加、删除、拷贝、清空、树深度计算、父节点、兄弟节点获取、先中后序递归及非遍历、按层次遍历、中序迭代器(非递归算法)、节点查找、先序和中序序列重建二叉树、...
链表存储二叉树是一种常见的数据结构实现方式,特别是在C语言中,由于其不支持内置的动态数组,链表成为了构建复杂数据结构如二叉树的理想选择。在本实验中,我们将探讨如何使用C语言来实现一个二叉链表表示的二叉树...
本资源“算法-理论基础- 二叉树- 二叉链表(包含源程序).rar”显然是一个关于二叉树基础知识的资料包,其中包含了相关的理论讲解以及源代码示例。下面我们将深入探讨二叉树的概念、特性、操作以及它们在实际应用中...
在计算机科学领域,数据结构是编程的基础,而静态链表、二叉树是其中非常重要的概念。本教程将深入探讨这两个主题,旨在帮助你巩固课本知识,提升编程技能。 首先,我们来了解一下静态链表。静态链表不同于我们常见...
实现下面两种生成二叉树的方法:a,先根生成二叉树(注意输入的先根序列),b)给定两个序列:前序+中序的序列,生成一棵二叉链表类型的二叉树 实现对生成的二叉树进行前序、中序、后序遍历,打印出遍历序列 ...
- 在中序遍历时,通过在线性结构(如链表)中穿线,方便后续的查找和操作。 5. **最优二叉树**: - 通常指哈夫曼树(Huffman Tree),是一种带权路径长度最短的二叉树,常用于数据压缩。 6. **树和森林**: - ...
数据结构-二叉树的建立先序中序后序层次遍历
二叉树是计算机科学中一种重要的数据结构,它在算法设计和实现中...提供的PDF文档"算法-理论基础- 二叉树- 线索链表(包含源程序)"应该会详细介绍这个主题,包括理论概念和具体的源代码实现,建议仔细阅读以加深理解。
源代码文件“算法-理论基础- 二叉树- 三叉链表(包含源程序).pdf”很可能包含了具体的实现细节和示例,涵盖了如何创建、遍历以及在二叉树和三叉链表上执行操作的方法。通过阅读这些源码,你可以了解如何用编程语言...
- 实现二叉树的创建(`create`):输入二叉树的结点元素,建立二叉链表。 - 实现一种遍历方式:可以是先序遍历、中序遍历、后序遍历或层序遍历。 - 求解二叉树的深度。 - 分析所编写算法的时间复杂度和空间复杂度...
在这个场景中,我们将使用C++编程语言通过链表来实现二叉树,这将帮助我们更灵活地管理内存,同时便于实现二叉树的各种操作。 首先,我们需要定义一个二叉树节点结构。在C++中,可以创建一个名为`Node`的结构体或类...