首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从上到下打印二叉树——层序遍历二叉树

题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。...二叉树结点的定义如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode...*m_pRight; }; 从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。...接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。 既然我们已经确定数据容器是一个队列了,现在的问题就是如何实现队列。...实际上我们无需自己动手实现,因为STL已经为我们实现了一个很好的deque(两端都可以进出的队列)。

78490
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    树的遍历--树的广度遍历(层次遍历),深度遍历(前序遍历,中序遍历,后序遍历的递归和非递归实现)

    ,netty,postgresql 这次就来整合下 树的遍历 没什么难的看了一上午,看完发现,真说出来我的理解,也不是你们的理解方式,所以这篇全代码好了。...广度遍历叫层次遍历,一层一层的来就简单了。...前序遍历,中序遍历,后序遍历的区别就是根在前(根左右),根在中(左根右),根在后(左右根) 在最后补全所有源码 二 广度优先遍历 层次遍历 //广度优先遍历 层次遍历 public...subTree.leftChild); visted(subTree); inOrder(subTree.rightChild); } } //中序遍历的非递归实现...new TreeNode(9, "X"); } public boolean isEmpty() { return root == null; } //树的高度

    4.6K40

    C#中如何遍历ArrayList

    1、什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素...(6)ToArray方法   这个方法把ArrayList的元素Copy到一个新的数组中。...例1:比如,一个可能有200个元素的数据动态添加到一个以默认16个元素大小创建的ArrayList中,将会经过: 16*2*2*2*2 = 256 四次的扩容才会满足最终的要求,那么如果一开始就以:...//第一种遍历 ArrayList 对象的方法 foreach(object o in al) { Console.Write(o.ToString()+" "); } //第二种遍历 ArrayList..."); } //第三种遍历 ArrayList 对象的方法 for(int i=0;i<Count;i++) { Console.Write(al[i].ToString()+" "); } 小结:

    80920

    前序遍历和中序遍历树构造二叉树

    题意 根据前序遍历和中序遍历树构造二叉树. 注意事项: 你可以假设树中不存在相同数值的节点 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]....返回如下的树: 2 / \ 1 3 思路 根据前序遍历和中序遍历的规律可得: 前序遍历的第一个就是整个树的根节点 这个根节点在中序遍历的左侧是其左子树,右侧是右子树。...将每一个节点都看作是一个单独的树,根据此 规律1 和 规律2 依次递归获取其左右子树的前序与中序遍历,直到前序遍历或中序遍历的长度仅剩1,则说明该节点为叶子节点,从而构造整棵树。...]; //右侧子节点的前序遍历 //从现有的中序遍历中拿到 左右子节点的中序遍历 for (int i = 0; i < inorder.length; i++) { if...treeRoot.right = buildTree(child_PreorderRight,child_InorderRight); return treeRoot; } } 原题地址 LintCode:前序遍历和中序遍历树构造二叉树

    1.8K40

    二叉树的先序遍历、中序遍历、后序遍历

    1 问题 Python中二叉树的先序遍历、中序遍历、后序遍历。 2 方法 先序遍历的递归算法定义: 若二叉树非空,则依次执行如下操作: ⑴ 访问根结点; ⑵ 遍历左子树; ⑶ 遍历右子树。...中序遍历的递归算法定义: 若二叉树非空,则依次执行如下操作: ⑴ 遍历左子树; ⑵ 访问根结点; ⑶ 遍历右子树。...后序遍历的递归算法定义: 若二叉树非空,则依次执行如下操作: ⑴ 遍历左子树;⑵ 遍历右子树;⑶ 访问根结点。...代码清单 1 ''' 树的构建: 3 9 20 15 7 ''' class Tree(): '树的构造' def __init__(self,data...(btree.base) 3 结语 我们针对Python中二叉树的先序遍历、中序遍历、后序遍历的问题,运用书上相应的基础知识,通过代码运行成功证明该方法是有效的,二叉树的遍历的应用非常广泛,希望通过未来的学习我们能写出更多长的

    18110

    树的遍历(已知前序遍历中序遍历求后序遍历,或者已知后序中序求先序)

    假设是1000个结点以内, 输入前序  4 1 3 2 6 5 7        中序  1 2 3 4 5 6 7  得到后续  2 3 1 5 7 6 4 已知前序遍历中序遍历求后序遍历: import...,建树 // @param pre 先序遍历的数组 // @param lo 先序遍历的起点下标 // @param in 中序遍历的数组 // @param ini 中序遍历的起点下标...// @param n 这个树的结点个数 public static Node createTree(int[] pre, int lo, int[] in, int ini, int...return node; } } 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。...假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

    28320

    二叉树的先序遍历 中序遍历 后序遍历 层序遍历

    两种特殊的二叉树 完全二叉树: 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。...对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。...也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树 二叉树的遍历 先序遍历 :先遍历根节点,再遍历左节点,最后遍历右节点 中序遍历 :先遍历左节点,再遍历根节点,最后遍历右节点...后序遍历 :先遍历左节点,再遍历右节点,最后遍历根节点 层序遍历 : 自上而下,自左至右逐层访问树的结点的过程就是层序遍历 遍历方法的实现 先建立一棵树 用代码建立以上树 class Node...= null){ stack.push(top.left); } } } // 二叉树的中序遍历,非递归迭代实现

    1.1K20

    树的遍历总结

    注意所有的遍历走过了路径都是相同的,只是输出(操作)的延迟问题,也可以在依靠树遍历的回溯完成操作,递归操作是对当前节点的不同状态下不同情况的考虑,不需要考虑上下父子关系 判断是不是二茬排序树 // 使用包装类可以传入数值为...二叉树的遍历都是可以用栈来进行模拟,因为递归就是在jvm中内部栈进行操作 public List inorderTraversal(TreeNode root) {...// 恢复二茬搜索树 , 主要问题是找到两个错位节点 // 如果在中序遍历中出现两次降序的节点,那么两个错误节点为第一次的较大节点,第二次的较小节点 // 如果只存在一次的降序,那么两个节点就是该位置节点...任然属于大问题,转小问题的子类优化问题 实际上构建二叉树只需要前序遍历或者中序遍历就可以 那么另一颗,只用于查找子树的大小 public TreeNode buildTree(int[] preorder...k小 // 直接使用二叉树中序的非递归进行遍历 public int kthSmallest(TreeNode root, int k) { Stack stack

    1.7K30

    二叉树---(3)前序遍历,中序遍历,后序遍历

    很多朋友在刚开始接触二叉树时,对前序遍历,中序遍历,后序遍历这三个遍历方式不太了解,很多博客中,上来就是实现方式,并没有清晰的阐述这三种遍历的步骤和顺序,这里记录一下。        ...所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。...遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。         按照根节点位置的不同分为前序遍历,中序遍历,后序遍历。...前序遍历:根节点->左子树->右子树 中序遍历:左子树->根节点->右子树 后序遍历:左子树->右子树->根节点 注意:在做前序遍历时,左右子树也是按照前序遍历的顺序, 同理,在做中序遍历时,左右子树也是按照中序遍历的顺序...例1:求下面树的三种遍历 ? 前序遍历:abdefgc 中序遍历:debgfac 后序遍历:edgfbca 例2:求下面树的三种遍历 ?

    68320

    C#刷剑指Offer | 从上到下打印二叉树

    【C#刷题】| 作者 / Edison Zhou ---- 我们来用之前学到的数据结构知识来刷《剑指Offer》的一些核心题目(精选了其中30+道题目),希望对你有帮助!...本文题目为:从上到下打印二叉树。 1题目介绍 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入下图中的二叉树,则依次打印出8、6、10、5、7、9、11。 ?...data; this.leftChild = left; this.rightChild = right; } } 2解题思路与实现 思路: 这道题实质是考查树的层次遍历...(广度优先遍历)算法: 每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。...树是图的一种特殊退化形式,从上到下按层遍历二叉树,从本质上来说就是广度优先遍历二叉树。

    55210

    二叉树进行中序遍历的结果_层次遍历和中序遍历构建二叉树

    目录 1.二叉树 2.二叉排序树(搜索树) ---- 1.二叉树 方法:在二叉树下画一条线作为X轴,把所有节点投影到X轴上,从左到右排列好,得到的结果就是中序遍历的结果。...例如: 得到“HDIBEAFJCG”是中序遍历的结果。 在面试或者考试的时候,用上这个小技巧又快又不会出错,绝对是不二选择。...如果想用代码实现的,可以参考这篇文章,二叉树中序遍历(递归+非递归)Java,其中详细介绍了中序遍历实现的方法和结果,包括递归和非递归两种方式。...2.二叉排序树(搜索树) 对于二叉排序树(搜索树)用上这个小技巧,还可以快速得到目标节点的前继节点、后继节点。...例如: 得到“10 20 40 50 55 60 62 69 75 80”是中序遍历的结果。 比如要删除20这个节点,那么就是用10或者40这两个节点中的一个替换20。

    38260

    树, 树的遍历, 树的数据结构

    数组,链表,树,图是我们平常接触最基础的数据结构,而且他数据结构基本都是通过这几个数据结构组合使用的结果,例如我们经常提到的 MySQL 索引使用的 B+ 树就是多叉树和链表的结合题, 而这几种基本的数据结构...,如果不使用指针其实根本没有办法感受这几种数据结构的原理,所以这里就是用 C 语言来实现几种简单的数据结构.树数据结构中的树其实非常简单,就是类似金字塔从树干到树的下层.上图就是一个简单的二叉树的结构...,我们可以用 c 语言简单写一个小如何表示.struct Tree{ int value; Tree *left; Tree *right;}*tree;二叉树的遍历二叉树遍历分为层序遍历和深度遍历...,对应就是深度搜索和广度搜索,其中深度搜索有包含前序遍历后序遍历和中序遍历,就是遍历根节点的顺序不同,这里只写一个前序遍历.show me the code前序遍历void frontedSearch(...= NULL){ q.push(q1->right); } }}树的变形树的数据结构中除了二叉树,还有很多其他的树,以及在一些开发过程中我们希望使用的往往是具有某些特性的树

    5700

    C#中的表达式树

    在面向对象的程序设计中,接口是一种重要的语言特性。在 C# 中,接口(interface)是一种特殊的类型,它定义了一个类或结构体应该支持的一组方法、属性和事件。...接口提供了一种可扩展和松散耦合的方式来定义程序设计的契约,常用于实现多态和组件化开发。本文将从架构师的角度深入分析 C# 中的接口类型和使用场景,并以 C# 代码实例来说明。...表达式树的定义和结构在C#中,表达式树是一个对象模型,用于表示某个表达式的结构。它由表达式树节点(Expression Tree Node)组成,每个节点代表了一个操作或表达式的一部分。...C#提供了Expression类来创建和组合表达式树。...C#中有广泛的应用,特别是在LINQ提供器、动态查询和ORM框架中。

    22320

    Algorithms_二叉树的前序遍历、中序遍历、后续遍历(深度优先)

    ---- 前序、中序、后序的含义 前序遍历: 先输出父节点,再遍历左子树,最后遍历右子树 中序遍历 : 先遍历左子树,再输出父节点,最后遍历右子树 后序遍历 : 先遍历左子树,再遍历右子树,最后输出父节点...看输出父节点的顺序 ,就可以确定是 前序、中序、后序 ---- 实例 我们先来分析下 将 下面的几个数 放到 二分搜索树中会是怎样的存放 。...注意我们这里用的是二分搜索树来演示二叉树的这个遍历,才会有中序遍历的那个排序的特征。...观察中序遍历,可以看到是排序的 ,这个也很好理解。 毕竟是 左侧的都是小于父节点的,右侧都是大于父节点的。...后序遍历的适用场景,举个例子 为二分搜索树释放内存 前序遍历、中序遍历、后续遍历本质上一种深度遍历 ---- Code (递归) 前序遍历 /** * * * @Title: preOrder

    74920
    领券