`
java-mans
  • 浏览: 11667934 次
文章分类
社区版块
存档分类
最新评论

一步一步写算法(之二叉树深度遍历)

 
阅读更多

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


深度遍历是软件开发中经常遇到的遍历方法。常用的遍历方法主要有下面三种:(1)前序遍历;(2)中序遍历;(3)后序遍历。按照递归的方法,这三种遍历的方法其实都不困难,前序遍历就是根-左-右,中序遍历就是左-根-右,后续遍历就是左-右-根。代码实现起来也不复杂。

1)前序遍历

void preorder_traverse(TREE_NODE* pTreeNode)
{
	if(pTreeNode){
		printf("%d", pTreeNode->data);
		preorder_traverse(pTreeNode->left);
		preorder_traverse(pTreeNode->right);
	}
}

2)中序遍历

void inorder_traverse(TREE_NODE* pTreeNode)
{
	if(pTreeNode){
		inorder_traverse(pTreeNode->left);
		printf("%d", pTreeNode->data);
		inorder_traverse(pTreeNode->right);
	}
}

3)后序遍历

void afterorder_traverse(TREE_NODE* pTreeNode)
{
	if(pTreeNode){
		afterorder_traverse(pTreeNode->left);
		afterorder_traverse(pTreeNode->right);
		printf("%d", pTreeNode->data);
	}
}

4)后序遍历的一个应用

上面的遍历方法看上去都比较简单,那他们的应用是什么呢?我们可以拿编程语言中语法树举一个例子。比如说,现在我们需要计算这样一个简单的表达式:

int m = 1 + 2 * 5 -4 / 2;

那么这个表达式的语法树可能是这样的,其中末尾的分号已经删除。

现在,我们对上面的表达式进行后序遍历,结果应该是这样的: m、1、2、5、*、4、2、\、-、+、=。那么这个输出的表达式,我们应该怎么计算呢?其实不复杂,我们只要发现连续两个数字和一个相连的符号就可以计算了,上面的表达式计算顺序应该是这样的:

/*
*        =
*     /     \
*   m         -
*          /     \
*          +      / 
*        /  \    /  \
*       1    *  4    2
*           /  \
*          2    5
*/

a)m、1、2、5、*、+、4、2、/、-、=
b)m、1、10、+、4、2、/、-、=

c)m、11、4、2、/、-、=

d)m、11、2、-、=

e)m、9、=

f)m


建议:

上面的算法虽然比较简单,也比较基础,但是还是建议朋友们应该多加练习和锻炼。


分享到:
评论

相关推荐

    二叉树遍历和图遍历演示系统

    二叉树遍历和图遍历是数据结构与算法领域中的重要概念,广泛应用于软件开发、计算机科学教学以及各种计算问题的求解。本系统旨在通过动态演示来帮助理解和掌握这两种遍历方法,并且提供了完整的C语言算法描述,以...

    遍历二叉树的非递归算法

    ### 遍历二叉树的非递归算法 #### 概述 在计算机科学领域,二叉树是一种常见的数据结构,在很多应用中都扮演着重要角色。对于二叉树的遍历,通常有三种主要的方式:前序遍历、中序遍历以及后序遍历。这些遍历方式...

    实现二叉树的各种遍历算法实验报告.docx

    总的来说,理解和实现二叉树的各种遍历算法是掌握数据结构基础的重要一步。通过这些操作,我们可以有效地搜索、构造和修改二叉树,进而解决各种复杂问题。在实际应用中,二叉树遍历算法常常用于构建搜索算法、编译器...

    二叉树代码遍历和创建等

    本文将深入探讨二叉树的遍历方法以及如何交换子树,这在算法设计、数据结构理解和软件开发中都是不可或缺的知识点。 首先,我们来详细讲解二叉树的遍历。遍历二叉树是指按照一定的顺序访问二叉树中的每一个节点。...

    一步一步写算法

    本篇文章主要介绍了算法的基本概念以及在编程中的具体应用,以一步一步学习写算法的思路,从基础的循环和递归,到复杂的数据结构处理。 1. 循环和递归是编程中常用的基本控制结构,用于处理重复的操作。循环利用...

    计算二叉树深度算法(递归、非递归)入门详解

    二叉树深度计算是计算机科学中的一个基础概念,特别是在数据结构和算法领域。二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点,通常称为左子节点和右子节点。理解如何计算二叉树的深度对于解决许多与树...

    非递归中序遍历二叉树PPT学习教案.pptx

    非递归中序遍历是二叉树遍历的一种常见方法,主要应用于数据...这种算法在处理大型二叉树或深度较大的二叉树时尤为有效,因为它减少了调用栈的深度,提升了性能。在实际编程中,这种技巧常被用于树的遍历和搜索等问题。

    图形化界面实现二叉树

    在计算机科学领域,二叉树是一种基础的数据结构,它由节点构成,每个节点最多有...通过MFC的图形化界面,用户不仅可以直观地观察二叉树的结构,还可以动态查看遍历和线索化的过程,这有助于深入理解二叉树的相关算法。

    C#二叉树按照树等级查节点算法

    总的来说,理解和掌握二叉树的层次遍历是提升C#编程技能的关键一步,这对于处理复杂的数据结构问题和优化算法效率至关重要。通过递归的方式实现层次遍历,可以加深对二叉树和递归理解,同时在实际编程中提供了另一种...

    二叉树的基础知识

    二叉树是计算机科学中一种重要的数据结构,它在算法设计和分析中扮演着至关重要的角色。二叉树由节点组成,每个节点最多有两个子...对于初学者来说,熟练掌握二叉树的概念和操作是迈向数据结构和算法殿堂的重要一步。

    数据结构与算法的一些实例,数据结构包括图(遍历算法)、树(哈夫曼树、AVL平衡树等)

    在图中,遍历算法是常见的操作,例如深度优先搜索(DFS)和广度优先搜索(BFS),它们分别按照深度和广度来探索图的节点,常用于求解最短路径、查找连通性和拓扑排序等问题。 接下来,我们转向算法部分。查找算法是程序...

    二叉树的三种递归和非递归算法

    本文将详细介绍二叉树的三种递归和非递归算法,并涉及相关的数据结构和算法问题。 首先,我们来理解二叉树的基本概念。二叉树是由根节点、若干个子节点(最多两个)构成的树形结构,每个节点可以是叶子节点(没有子...

    二叉树实验报告

    二叉树是一种重要的数据结构,它在计算机科学中有着广泛的应用,特别是在算法设计和数据存储中。本实验报告主要探讨了二叉树的定义、基本操作以及如何通过递归遍历来实现各种遍历方法。以下是相关知识点的详细说明:...

    用C和java写的一些经典基础的算法

    5. 树结构算法:如二叉树的遍历(前序、中序、后序),二叉查找树的操作,以及最小堆等。 6. 字符串算法:如KMP(Knuth-Morris-Pratt)模式匹配算法,用于在一个字符串中查找另一个字符串出现的位置。 7. 分治策略...

    算法讲义 算法讲义算法讲义

    《算法讲义》是一份深度探讨算法的教材或学习资料,其内容可能涵盖了广泛的算法理论与实践应用。在计算机科学中,算法是解决问题的关键,它是一系列清晰定义的步骤,用于执行特定任务或解决特定计算问题。算法的重要...

    算法面试题100道for阿里、百度、腾讯、京东、美团、今日头条.pdf

    - **图的遍历算法**:深度优先搜索(DFS)和广度优先搜索(BFS)。 - **图的高级算法**:拓扑排序、最小生成树、单源最短路径。 #### 第六部分:前缀树、堆结构和贪心算法 - **前缀树**:用于处理字符串匹配等问题...

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

    更高效的算法是同时遍历两个链表,当一个链表遍历完后,开始遍历另一个链表,如果在某个节点相遇,则该节点即为相交点。 10. **两个单链表相交,计算相交点** 相交点即为上一点所述的相遇节点。 11. **用链表...

    基于BFS算法的图的遍历设计与实现共24页.pdf.zip

    2. **层次遍历**:在树形结构中,BFS可以用于按层次顺序访问所有节点,如二叉树的层次遍历。 3. **社交网络分析**:在社交网络中,BFS可以帮助找到一个人的“朋友圈”或计算两人的最短“社交距离”。 **六、对比DFS...

    算法-树形结构- 树与二叉树- 无根树转有根树.rar

    理解并掌握树与二叉树的无根树到有根树的转换是提升算法能力的关键一步。这不仅可以帮助我们解决复杂的数据结构问题,还能为理解和实现各种高级算法打下坚实的基础。通过深入学习和实践,我们可以更好地应对各种计算...

Global site tag (gtag.js) - Google Analytics