精华内容
下载资源
问答
  • BiTree CreateBiTree()//创建树 { char p;BiTree T; scanf("%c",&p); if(p == '$') T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间 T->data=p; T->lchild=CreateBiTree(); T->...
  • 自己写了个二叉树的操作,参考了一下别人的写法,发现应该好好学习一下别人的写法:   源文地址: http://hi.baidu.com/klcstudy/blog/item/5fdf49b5b57d62ce37d3ca18.html/cmtid/203d9f10fe11210c203f2e8e  ...
    自己写了个二叉树的操作,参考了一下别人的写法,发现应该好好学习一下别人的写法 

    源文地址:

    http://hi.baidu.com/klcstudy/blog/item/5fdf49b5b57d62ce37d3ca18.html/cmtid/203d9f10fe11210c203f2e8e

     

     

    贴上参考来的代码:

     

    1. #include <iostream>  
    2.   
    3. using namespace std;  
    4.   
    5. //*************************************************************************************  
    6. //二叉树结点类的定义  
    7. template<class T>  
    8. struct BTNode  
    9. {  
    10.     T data;  
    11.     BTNode <T> * Lchild,*Rchild;  
    12.     BTNode(T nodeValue = T(),BTNode<T>* leftNode = NULL,BTNode<T>* rightNode = NULL )  
    13.         :data(nodeValue),Lchild(leftNode),Rchild(rightNode){}       //可选择参数的默认构造函数  
    14. };  
    15. //**************************************************************************************  
    16. //二叉树的建立  
    17. template <class T>  
    18. void createBinTree(BTNode<T> * &root )  
    19. {  
    20.     BTNode<T>* p = root;  
    21.     BTNode<T>* k;  
    22.     T nodeValue ;  
    23.     cin>>nodeValue;  
    24.     if(nodeValue==-1)  
    25.     {  
    26.         root=NULL;  
    27.     }  
    28.     else  
    29.     {  
    30.         root=new BTNode<T>();  
    31.         root->data = nodeValue;  
    32.         createBinTree(root->Lchild);  
    33.         createBinTree(root->Rchild);  
    34.     }  
    35. }  
    36. //************************************************************************************  
    37. //二叉树的先序遍历  
    38. template <class T>  
    39. void preOrder( BTNode<T> * & p)  
    40. {  
    41.     if(p)  
    42.     {  
    43.         cout<<p->data<<" ";  
    44.         preOrder(p->Lchild);  
    45.         preOrder(p->Rchild);  
    46.     }  
    47. }  
    48. //**************************************************************************************  
    49. //二叉树的中序遍历  
    50. template <class T>  
    51. void inOrder(BTNode<T> * & p)  
    52. {  
    53.       
    54.     if(p)  
    55.     {  
    56.         inOrder(p->Lchild);  
    57.         cout<<p->data<<" ";  
    58.         inOrder(p->Rchild);  
    59.     }  
    60. }  
    61. //**************************************************************************************  
    62. //二叉树的后序遍历  
    63. template <class T>  
    64. void levelOrder(BTNode<T> *& p)  
    65. {  
    66.     if(p)  
    67.     {  
    68.         levelOrder(p->Lchild);  
    69.         levelOrder(p->Rchild);  
    70.         cout<<p->data<<" ";  
    71.     }  
    72. }  
    73. //*************************************************************************************  
    74. //统计二叉树中结点的个数  
    75. template<class T>  
    76. int countNode(BTNode<T> * & p)  
    77. {  
    78.     if(p == NULL) return 0;  
    79.     return 1+countNode(p->Lchild)+countNode(p->Rchild);  
    80. }  
    81. //***********************************************************************************  
    82. //求二叉树的深度  
    83. template<class T>  
    84. int depth(BTNode<T> *& p)  
    85. {  
    86.     if(p == NULL)  
    87.         return -1;  
    88.     int h1 = depth(p->Lchild);  
    89.     int h2 = depth(p->Rchild);  
    90.     if(h1>h2)return (h1+1);  
    91.     return h2+1;  
    92. }  
    93. //***********************************************************************************  
    94. //二叉树的消毁操作  
    95. template<class T>  
    96. BTNode<T>* destroy(BTNode<T>* p)                         //消毁函数,用来消毁二叉树中的各个结点  
    97.     {  
    98.         if(p)  
    99.         {  
    100.             return destroy(p->Lchild);  
    101.             return destroy(p->Rchild);  
    102.             delete p;  
    103.         }  
    104.     }  
    105. //********************************************************************************  
    106. //主函数的设计   
    107. int main ()  
    108. {  
    109.     BTNode<int> * rootNode = NULL;  
    110.     int choiced = 0;  
    111.     while(true)  
    112.     {  
    113.         system("cls");  
    114.         cout<<"/n/n/n                              ---主界面---/n/n/n";  
    115.         cout<<"                     1、创建二叉树                2、先序遍历二叉树/n";  
    116.         cout<<"                     3、中序遍历二叉树            4、后序遍历二叉树/n";  
    117.         cout<<"                     5、统计结点总数              6、查看树深度    /n";  
    118.         cout<<"                     7、消毁二叉树                0、退出/n/n";  
    119.         cout<<"             请选择操作:";  
    120.         cin>>choiced;  
    121.         if(choiced == 0)  
    122.             return 0;  
    123.         else if(choiced == 1)  
    124.         {  
    125.             system("cls");  
    126.             cout<<"请输入每个结点,回车确认,并以-1结束:/n";  
    127.             createBinTree(rootNode );  
    128.         }  
    129.         else if(choiced == 2)  
    130.         {  
    131.             system("cls");  
    132.             cout<<"先序遍历二叉树结果:/n";  
    133.             preOrder(rootNode);  
    134.             cout<<endl;  
    135.             system("pause");  
    136.         }  
    137.         else if(choiced == 3)  
    138.         {  
    139.             system("cls");  
    140.             cout<<"中序遍历二叉树结果:/n";  
    141.             inOrder(rootNode);  
    142.             cout<<endl;  
    143.             system("pause");  
    144.         }  
    145.         else if(choiced == 4)  
    146.         {  
    147.             system("cls");  
    148.             cout<<"后序遍历二叉树结果:/n";  
    149.             levelOrder(rootNode);  
    150.             cout<<endl;  
    151.             system("pause");  
    152.         }  
    153.         else if(choiced == 5)  
    154.         {  
    155.             system("cls");  
    156.             int count = countNode(rootNode);  
    157.             cout<<"二叉树中结点总数为"<<count<<endl;  
    158.             system("pause");  
    159.         }  
    160.         else if(choiced == 6)  
    161.         {  
    162.             system("cls");  
    163.             int dep = depth(rootNode);  
    164.             cout<<"此二叉树的深度为"<<dep<<endl;  
    165.             system("pause");  
    166.         }  
    167.         else if(choiced == 7)  
    168.         {  
    169.             system("cls");  
    170.             cout<<"二叉树已被消毁!/n";  
    171.             destroy(rootNode);  
    172.             cout<<endl;  
    173.             system("pause");  
    174.         }  
    175.         else   
    176.         {  
    177.             system("cls");  
    178.             cout<<"/n/n/n/n/n/t错误选择!/n";  
    179.         }  
    180.           
    181.     }  
    182. }  

     

     

     

    如                           5
                                /     /
                              3       8
                             / /     / /
                            2   4   6    9
                           / /   / / / /    / /
                         1 -1-1-1-17 -1 -1
                        / /              / /
                     -1 -1          -1 -1

    那么输入时的序列为:5321-1-1-14-1-186-17-1-19-1-1

    展开全文
  • 根据上面的输入数据可以画出自己创建二叉树(上图)。这是草稿纸上的操作,代码结果只输出中序遍历结果。 完整代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h>

    代码都是书上的。
    需要注意的是怎么输入。
    在这里插入图片描述
    第一行 为自己输入的数据,在创建的二叉树中数据域为char型,故空格和enter键也会被存入二叉树数据中。‘#’号总比二叉树数据结点多一个,不然一直在输入,无法进入输出。输出是中序遍历打印的。
    在这里插入图片描述
    根据上面的输入数据可以画出自己创建的二叉树(上图)。这是草稿纸上的操作,代码结果只输出中序遍历结果。

    完整代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct BiTNode
    {
    	char data;//结点的数据域 
    	struct BiTNode *lchild,*rchild;//左右孩子指针 
    }BiTNode,*BiTree;
    
    void CreateTree(BiTree &T)//创建二叉树,这里是先序遍历的顺序建立的二叉链表  递归形式 
    {
    	char ch,trmp;
    	scanf("%c",&ch);//输入链表数据 
    	if(ch == '#')//如果出现输入的是#,终止递归。终止递归条件 
    		T = NULL;
    	else
    	{
    		T = (BiTNode*)malloc(sizeof(BiTNode));//申请一个根结点 
    		T->data = ch;//对根结点进行赋值 
    		CreateTree(T->lchild);//递归创建左子树 
    		CreateTree(T->rchild);//递归创建右子树 
    	}
    }
    
    bool TreeEmpty(BiTree T)//判断二叉树是否为空 
    {
    	if(T == NULL)//bool类型,如果二叉树为空,返回true,否则返回false 
    		return true;
    	return false;
    }
    
    void InOrderTraverse(BiTree T)//打印二叉树 ,中序遍历二叉树的递归算法 
    {
    	if(T)//递归终止条件是T为NULL 
    	{
    		InOrderTraverse(T->lchild);//中序遍历左子树 
    		printf("%c  ",T->data);//输出打印根结点 
    		InOrderTraverse(T->rchild);//中序遍历右子树 
    	}
    }
    
    void CopyTree(BiTree T,BiTree &NewT)//复制一颗和T完全相同的二叉树 
    {
    	if(T == NULL)//递归终止条件 
    	{
    		NewT = NULL;
    		return ;
    	}
    	else
    	{
    		NewT = (BiTNode*)malloc(sizeof(BiTNode));//申请一个根结点 
    		NewT->data = T->data;//复制根结点 
    		CopyTree(T->lchild,NewT->lchild);//递归复制左子树 
    		CopyTree(T->rchild,NewT->rchild);//递归复制右子树 
    	}
    }
    
    int Depth(BiTree T)//计算二叉树T的深度 
    {
    	int m = 0,
    		n = 0;//定义两个变量 
    	if(TreeEmpty(T))//递归终止条件 
    		return 0;
    	else
    	{
    		m = Depth(T->lchild);//递归计算左子树的深度记为m 
    		n = Depth(T->rchild);//递归计算右子树的深度记为n 
    		if(m>n)//二叉树的深度为m与n的较大者加1 
    			return m+1;
    		return n+1;
    	}
    }
    
    int NodeCount(BiTree T)//统计二叉树T中的结点的个数 
    {
    	if(T == NULL)//递归终止条件 
    		return 0;
    	else//结点个数为左子树的结点个数+右子树的结点个数 
    		return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
    }
    
    int main()
    {
    	BiTree T;//创建一个空二叉树 
    	CreateTree(T);// 创建二叉树 
    	InOrderTraverse(T);//打印二叉树 中序遍历
    	printf("\n");
    	BiTree NewT;//创建一个新二叉树 
    	CopyTree(T,NewT);//复制二叉树 
    	InOrderTraverse(NewT);
    	printf("\n");
    	printf("%d\n",Depth(T));//二叉树T的深度 
    	printf("%d\n",NodeCount(T));//二叉树的结点个数 
    	return 0;
    }
    

    (完)

    展开全文
  • 先序创建二叉树数据结构教程中都有很详细的代码说明,但书中并没有提到是否有中序,后序创建二叉树。若有,又应该怎么创建,代码应该怎么写。 问题 一:是否有中序创建二叉树?           ...

    作者:iampsl@qq.com

     

    先序创建二叉树,数据结构教程中都有很详细的代码说明,但书中并没有提到是否有中序,后序创建二叉树。若有,又应该怎么创建,代码应该怎么写。

    问题

    一:是否有中序创建二叉树?

     

     

     

     

     

     

     如上图二叉树,若有中序创建二叉树,则输入的字符串应该为:ΦBΦDΦCΦAΦEΦ

    而下图的二叉树,若有中序创建二叉树,则输入的字符也为ΦBΦDΦCΦAΦEΦ

     

    说明单单凭输入的字符ΦBΦDΦCΦAΦEΦ,则有多种二叉树与其对应,故计算机是不可能为你生成你想要的结果,因为计算机处理的代码不能有二义。

     

    二,是否有后序创建二叉树?

     

      

    还是以这个二叉树为例,假设有后序创建二叉树,则创建的字符串为:ΦΦΦDΦCBΦΦEA

    由于是后序的,所以最后一个非空字符一定是这颗二叉树的根结点,当然最后一定是一个非空结点,若不是,则只能说明是一颗空树。若我们把这个后序字符串反转一下变为: AEΦΦBCΦDΦΦΦ,则得到的这个字符串我们可以把它看作是如此遍序得到的,先访问根结点,再访问右子树,最后访问左子树,我把这种访问方式叫做反先序,注意在访问每一颗子树时,都是以这种反先序进行访问的,可以很明显看出来这和先序访问在本质上是没有区别的,只是先右后左,而先序创建二叉树能行,故后序创建二叉树也一样行,那应该怎么创建呢,其实很简单,首先得到输入的创建字符串,然后再返转字符串,最后按到先创建根结点,再创建右子树,最后创建左子树进行递归调用。

     

    展开全文
  • 数据结构 二叉树 创建 遍历

    千次阅读 2009-07-30 14:06:00
    二叉树的结构比较简单,就不罗嗦了,直接看源代码:为了以后快速查找,我还是简单说下怎么输入数据,如下图所示的数据结构: 像这样的数据结构我们怎么输入呢?第一次输入ab#,然后回车。第二次输入c##,然后回车。第...

    二叉树的结构比较简单,就不罗嗦了,直接看源代码:

    为了以后快速查找,我还是简单说下怎么输入数据,如下图所示的数据结构:

     

    像这样的数据结构我们怎么输入呢?

    第一次输入ab#,然后回车。

    第二次输入c##,然后回车。

    第三次输入d#,然后回车。

    第四次输入g##,然后回车。

    不知道以后的我或者网友是否看明白呢?希望以后的我和大家领悟能力比我现在这些苍白的文字强n的XX次方!

    展开全文
  • 线索二叉树利用末节点的空指针将其他节点连接起来,达到整个树枝顺序和逆序都能遍历的...详细请看源代码: 为了以后快速查找,我还是简单说下怎么输入数据,如下图所示的数据结构: 像这样的数据结构我们怎么输入呢?
  • 广义表输入二叉树,“#”表示空树 例 A(B(D,E),C(F,#)) reference 思路 老规矩,举几个例子分析下。 创建左子树之前,要输入一个"(",遇到“,”表示输入结束 创建右子树之前,要输入一个“,”,遇到“)”表示...
  • 基于以下数据结构,采用从文件读入元素并基于后序遍历的方法创建一个包含8个结点的二叉链表树,然后前序输出树中的结点。要求在遍历函数中采用函数指针。 typedef struct TreeNode *Tree; struct TreeNode { Element...
  • case 3:printf("\n请输入要查找哪个成员的祖先:\n"); scanf("%s",cname); getchar(); FindAncestry(head,cname,0); printf("\n请按任意键返回主菜单..."); break; case 4: exit(0); } ...
  • 二叉树创建、遍历、高度 例子

    千次阅读 2015-09-20 19:16:21
    注意:输入数据的正确性,一定是要按照,先序进行输入,如果输入不正确则不会有值输出。 可以输入:ABC##DE#G##F## 可以输入:AB##C## #include #include #include typedef struct bnode{ char
  • //这个是增加一个新的树,每棵树创建一1个单独的dat文件储存,文件名为根节点的name……但是我不知道怎么做 case 2:deleteTree();break; case 3: { cout请输入树的祖先的名称"; cin>>name; n=getTree...
  • //创建二叉树 printf("\n前序遍历二叉树\n"); PreOrderTraverse(tree);//前序遍历二叉树 printf("\n中序遍历二叉树\n"); InOrderTraverse(tree);//中序遍历二叉树 printf("\n后序遍历二叉树\n"); ...
  • 大话数据结构

    2018-12-14 16:02:18
    项目经理看完代码后拍着桌子对他说:“你数据结构是怎么学的?” 1.3数据结构起源 4 1.4基本概念和术语 5 正所谓“巧妇难为无米之炊”,再强大的计算机,也要有“米”下锅才可以干活,否则就是一堆破铜烂铁。这个...
  • scanf,getchar

    2015-11-15 16:51:54
    是这样的,实验要求按先序创建二叉树,然后要有三种遍历选择,输入0是重建二叉树,输入1是先序输出,输入2是中序,3是后序。因为我对二叉树还不是很熟,先写了下面的代码试试行不行,结果ok。typedef struct binode{ ...
  • 它们可能不(通常)是有统计学意义的,但它们是提供(希望相当快的)输入(索引创建的关键)和输出(内存中的位置)之间的映射的结构。二叉树,是一种典型的有序数据结构,甚至采用了树的形式,这是机器学习工具箱中的核心...
  • 1.2.8 对大数据平台中的元数据管理是怎么理解的,元数据收集管理体系是怎么样的,会对大数据应用有什么样的影响 1.2.9 你理解常见如阿里,和友商大数据平台的技术体系差异以及发展趋势和技术瓶颈,在存储和计算两...
  • 0167. 两数之和 II 输入有序数组 0169. 多数元素 0172. 阶乘后的零 0190. 颠倒二进制位 0191. 位 1 的个数 0198. 打家劫舍 0203. 移除链表元素 0206. 反转链表 0219. 存在重复元素 II 0226. 翻转二叉树 0232. 用栈...
  • 如题,在学习二叉搜索树时想要自己添加一些内容,但是不知道为什么就是会出错,自己感觉好像问题出在创建二叉树的地方,但是不知道怎么改.希望大佬能帮忙看看,如果能配上讲解就更好了,感谢. 下面贴上代码,之后是罗列...
  • 树、二叉树、图:深度优先(DFS)、广度优先(BFS) 递归 分治 滑窗 三大牛逼算法:回溯、贪心、动态规划(DP) 怎么学? 刷题 leetcode力扣官网,覆盖简单、中等、困难,刷够300题以上 精选书籍推荐 《漫画算法...
  • 答:(1)可用来创建动态增长和减小的数据结构 (2)它是类型无关的,因此具有很高的可复用性。 (3)它在编译时而不是运行时检查数据类型,保证了类型安全 (4)它是平台无关的,可移植性 (5)可用于基本数据类型 8...
  • Java面试宝典2010版

    2011-06-27 09:48:27
    5、说明生活中遇到的二叉树,用java实现二叉树 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 7、写一个Singleton出来。 8、递归算法题1 9、递归算法题2 10...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...
  • Java面试宝典-经典

    2015-03-28 21:44:36
    5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...
  • Java面试宝典2012版

    2012-12-03 21:57:42
    5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、...
  • java面试宝典2012

    2012-12-16 20:43:41
    5、说明生活中遇到的二叉树,用java实现二叉树 73 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 78 7、写一个Singleton出来。 81 8、递归算法题1 84 9、递归...
  • 5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...
  • Java面试笔试资料大全

    热门讨论 2011-07-22 14:33:56
    5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...
  • Java面试宝典2012新版

    2012-06-26 19:20:00
    5、说明生活中遇到的二叉树,用java实现二叉树 66 6、从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序: 71 7、写一个Singleton出来。 75 8、递归算法题1 77 9、递归...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

创建二叉树怎么输入数据