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

链表-二叉树

阅读更多
链表-二叉树

//========================================//
//程序名称:利用链表建立二叉树            //
//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++语言实现的一些核心数据结构和算法,这些都是计算机科学的基础。 首先,我们来详细探讨排序算法。排序是计算机科学中最基本的操作之一,它涉及将一组...

    算法大全-面试题-链表-栈-二叉树-数据结构.docx

    以上就是针对链表、栈、二叉树以及数据结构的一些常见面试题及其解题思路。这些知识点在实际的软件开发和算法设计中都有着广泛的应用。掌握这些基本操作和算法,对于提升编程能力和解决复杂问题的能力至关重要。

    有用的C语言源代码-二叉树-链表-数组等

    这里可能包括单链表、双向链表、循环链表等不同类型的链表实现,以及链表的基本操作,如插入、删除、查找等。链表的理解和操作是数据结构学习的基础。 接着是"二叉树"。二叉树是最简单但又非常重要的非线性数据结构...

    数据结构C语言版-二叉树的三叉链表存储表示.doc

    数据结构C语言版-二叉树的三叉链表存储表示.doc

    C++数据结构-二叉树和线索二叉树

    基于二叉链表的二叉树,实现了二叉树的多种操作:添加、删除、拷贝、清空、树深度计算、父节点、兄弟节点获取、先中后序递归及非遍历、按层次遍历、中序迭代器(非递归算法)、节点查找、先序和中序序列重建二叉树、...

    链表存储二叉树实验(C语言)

    链表存储二叉树是一种常见的数据结构实现方式,特别是在C语言中,由于其不支持内置的动态数组,链表成为了构建复杂数据结构如二叉树的理想选择。在本实验中,我们将探讨如何使用C语言来实现一个二叉链表表示的二叉树...

    算法-理论基础- 二叉树- 二叉链表(包含源程序).rar

    本资源“算法-理论基础- 二叉树- 二叉链表(包含源程序).rar”显然是一个关于二叉树基础知识的资料包,其中包含了相关的理论讲解以及源代码示例。下面我们将深入探讨二叉树的概念、特性、操作以及它们在实际应用中...

    计算机软件基础 静态链表、二叉树等

    在计算机科学领域,数据结构是编程的基础,而静态链表、二叉树是其中非常重要的概念。本教程将深入探讨这两个主题,旨在帮助你巩固课本知识,提升编程技能。 首先,我们来了解一下静态链表。静态链表不同于我们常见...

    数据结构实验-二叉树的基本操作

    运用二叉链表实现二叉树的基本操作,包括:创建二叉树的存储结构、复制已有的二叉树、计算已有的二叉树的深度、先根序序列、中根序序列、后根序序列等。 输入格式:AB#C##D## 二、实验目的 掌握二叉链表及二叉树的...

    数据结构实验8-二叉树

    实现下面两种生成二叉树的方法:a,先根生成二叉树(注意输入的先根序列),b)给定两个序列:前序+中序的序列,生成一棵二叉链表类型的二叉树 实现对生成的二叉树进行前序、中序、后序遍历,打印出遍历序列 ...

    数据结构课件---二叉树

    - 在中序遍历时,通过在线性结构(如链表)中穿线,方便后续的查找和操作。 5. **最优二叉树**: - 通常指哈夫曼树(Huffman Tree),是一种带权路径长度最短的二叉树,常用于数据压缩。 6. **树和森林**: - ...

    数据结构-二叉树建立

    数据结构-二叉树的建立先序中序后序层次遍历

    算法-理论基础- 二叉树- 线索链表(包含源程序).rar

    二叉树是计算机科学中一种重要的数据结构,它在算法设计和实现中...提供的PDF文档"算法-理论基础- 二叉树- 线索链表(包含源程序)"应该会详细介绍这个主题,包括理论概念和具体的源代码实现,建议仔细阅读以加深理解。

    算法-理论基础- 二叉树- 三叉链表(包含源程序).rar

    源代码文件“算法-理论基础- 二叉树- 三叉链表(包含源程序).pdf”很可能包含了具体的实现细节和示例,涵盖了如何创建、遍历以及在二叉树和三叉链表上执行操作的方法。通过阅读这些源码,你可以了解如何用编程语言...

    c++二叉树实现代码

    - 实现二叉树的创建(`create`):输入二叉树的结点元素,建立二叉链表。 - 实现一种遍历方式:可以是先序遍历、中序遍历、后序遍历或层序遍历。 - 求解二叉树的深度。 - 分析所编写算法的时间复杂度和空间复杂度...

    使用链表实现二叉树

    在这个场景中,我们将使用C++编程语言通过链表来实现二叉树,这将帮助我们更灵活地管理内存,同时便于实现二叉树的各种操作。 首先,我们需要定义一个二叉树节点结构。在C++中,可以创建一个名为`Node`的结构体或类...

Global site tag (gtag.js) - Google Analytics