首页 > 其他分享 >链式二叉树的遍历

链式二叉树的遍历

时间:2023-09-26 20:23:34浏览次数:35  
标签:遍历 pRoot leftChild 二叉树 链式 NULL PBINARYTREE

  • 如果使用动态创建二叉树需要使用递归,故使用静态的方式创建二叉树
  • 代码如下:

   //链式二叉树
   ///使用静态创建二叉树 
   #include<stdio.h>
   #include<malloc.h>
   //定义 二叉树的数据结构
  typedef struct binaryTree{
   		char value;//存储的值
   		struct binaryTree *leftChild;//左孩子
		struct binaryTree *rightChild;//右孩子    
		    
   } BINARYTREE,*PBINARYTREE;  
   
   
   //静态方法初始化二叉树
   void creatBinaryTree(PBINARYTREE pRoot ){
   	//先将该树所有的结点都创建出来
	       	PBINARYTREE pB = (PBINARYTREE)malloc(sizeof(BINARYTREE));
	       	PBINARYTREE pC = (PBINARYTREE)malloc(sizeof(BINARYTREE));
            PBINARYTREE pD = (PBINARYTREE)malloc(sizeof(BINARYTREE));
             PBINARYTREE pE = (PBINARYTREE)malloc(sizeof(BINARYTREE));
	        //开始进行结点连接 
           pRoot->value='A';
           pRoot->leftChild=pB;
           pRoot->rightChild=pC;
           pB->value='B';
           pB->leftChild=NULL;
           pB->rightChild=NULL;
           pC->value='C';
           pC->leftChild=pD;
           pC->rightChild=NULL;
           pD->value='D';
           pD->leftChild=NULL;
		   pD->rightChild=pE;
		   pE->value='E';
		   pE->leftChild=NULL;
		   pE->rightChild=NULL;
   		
   } 
   //二叉树的先序遍历 
   void preShow(PBINARYTREE pRoot){
   		/*
   		1.先遍历根节点
		2.然后先序遍历左子树
		3.再然后先序遍历右子树   
		注意:必须要满足该节点非空才能遍历 
   		*/
   	if(pRoot!=NULL){
   			printf("%c\n",pRoot->value);
   			
		   }
	if(NULL!=pRoot->leftChild){
			preShow(pRoot->leftChild);
		}   
		
		if(NULL!=pRoot->rightChild){
			preShow(pRoot->rightChild);
		} 
   	
   		
   }
   
  
   //中序遍历
   void inShow(PBINARYTREE pRoot)
   {
   		//中序遍历左子树
   		if(pRoot->leftChild!=NULL){
   				  inShow(pRoot->leftChild)  ;
		   }
		   //遍历根节点
		   if(pRoot!=NULL){
		   		printf("%c\n",pRoot->value);

		   }
		   
		   // 中序遍历右子树
		   if(pRoot->rightChild!=NULL){
		   		inShow(pRoot->rightChild);	
		   } 
	
	} 
   
    //后序遍历
	void postShow(PBINARYTREE pRoot)
	{
		//后续遍历左子树
		if(pRoot->leftChild!=NULL)
		{
			postShow(pRoot->leftChild);
		 } 
		 //后续遍历右子树
		 if(pRoot->rightChild){
		 	postShow(pRoot->rightChild);
		 } 
		 //遍历根节点
		 printf("%c\n",pRoot->value); 
	 } 
   int main()
   {
   	//创建根节点 
   	PBINARYTREE root = (PBINARYTREE)malloc(sizeof(BINARYTREE));
   	//创建二叉树
	  creatBinaryTree(root);
	   //先序遍历二叉树
	    preShow(root);
	    //中序遍历二叉树
		inShow(root); 
		//后序遍历二叉树
	postShow(root); 
	    
	printf("hello");
   	
   	return 0;
	} 


标签:遍历,pRoot,leftChild,二叉树,链式,NULL,PBINARYTREE
From: https://www.cnblogs.com/swtaa/p/17731049.html

相关文章

  • ## day16 - 二叉树part03
    day16-二叉树part03力扣104.二叉树的最大深度思路:最大深度,即为顶点高度。如果想求高度,人类思维的角度,就是从底层开始算,往上一层+1,加到顶点就是高度,也就是最大深度。因此要用后序遍历,这样可以左右根的顺序进行遍历,从而一层一层向上返回结果,返回到根节点的时候就计算出来了最......
  • 容器遍历五种方式
    容器遍历#include<QElapsedTimer>std::vector<int>vector(999999,999);QElapsedTimertime;//测试耗时时间类用法time.start()j;time.elapsed();第一种利用for循环,获取容器头和尾地址,从头开始遍历直到末尾for(autoit=vector.begin();it!=vector.end();it+......
  • 如何阻止os.walk遍历所有子目录?
    果只想搜索指定的目录。最好使用os.listdir,然后只过滤os.path.isfile,如下所示:importosmy_path='/entire/path/to/files/'file_list=[]forfilenameinos.listdir(my_path):filepath=os.path.join(my_path,filename)ifos.path.isfile(filepath):fileList.a......
  • Spring Boot 目录遍历--表达式注入--代码执行--(CVE-2021-21234)&&(CVE-2022-22963)&&
    SpringBoot目录遍历--表达式注入--代码执行--(CVE-2021-21234)&&(CVE-2022-22963)&&(CVE-2022-22947)&&(CVE-2022-2296)SpringBoot目录遍历(CVE-2021-21234)漏洞简介spring-boot-actuator-logview是一个简单的日志文件查看器作为SpringBoot执行器端点,在0.2.13版本之前存......
  • (转)树、森林与二叉树之间的转换
    原文:https://heptaluan.github.io/2020/04/02/Essay/19/本章我们主要来看一下树、森林和二叉树之间的相互转换以及赫夫曼树的相关概念普通树转换为二叉树我们借助图片来进行了解,首先下图是一颗普通的树,它有三个结点,所以明显不是二叉树如果将其转换成相应的二叉树分为两个步......
  • ## day15 - 二叉树part02
    day15-二叉树part02力扣102.二叉树的层序遍历思路:使用一个队列,将根节点放入队列,并使用size记录每一层的节点数量,然后遍历。为什么和深度优先搜索不一样了呢?为什么不能使用递归了呢?比如先序遍历时,每层的逻辑都是根左右,遍历到当前节点,就对当前节点实施根左右,可以完成递归。......
  • (转)Python描述数据结构之线索二叉树篇
    原文:https://blog.csdn.net/qq_42730750/article/details/108285846前言  本篇章主要介绍线索二叉树,包括线索二叉树的基本概念、构造及遍历,并用Python实现其创建及其遍历等操作。1.基本概念  上篇博客介绍的二叉链表的存储结构体现的只是一种父子关系,它不能直接得到结点在......
  • 完全二叉树的创建与遍历
    创建一棵完全二叉树(递归方式)(创建方法仅使用与完全二叉树)层序遍历完全二叉树(遍历算法适用于所有二叉树):利用队列FIFO的性质中序遍历完全二叉树(递归方式,遍历算法适用于所有二叉树)先序遍历完全二叉树(递归方式,遍历算法适用于所有二叉树)后序遍历完全二叉树(递归方式,遍历算法适用于所......
  • 9.23栈的链式和数组实现
    //栈的链表实现importjava.util.Iterator;publicclassMain{publicstaticvoidmain(String[]args){LinkedListStack<Integer>l=newLinkedListStack<>(5);l.push(1);l.push(2);l.push(3);Iterator<Integer&g......
  • 代码随想录算法训练营day17 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.
    110.平衡二叉树classSolution{public:intgetHeight(TreeNode*node){if(node==NULL)return0;intleftHeight=getHeight(node->left);if(leftHeight==-1)return-1;intrightHeigh......