Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux

求二叉树中两个节点的最低公共父节点

求二叉树中两个节点的最低公共父节点

必须通过遍历查找一个节点的祖先集合,然后比较两个节点的祖先集合就可以找到最低的那个。这里采用后序遍历,并传入一个栈记录该节点的祖先节点。在每次访问一个节点时,先把这个节点压入栈,然后判断该节点是不是要查找的那个节点,如果是返回。接着查找它的左子树和右子树,当要查找的节点在它的左右子树中则返回。然后判断该节点与栈顶节点是否相同,是则弹出栈顶元素。这是因为相同就代表了在访问它的左右子树时没有添加新的节点,也就是说要查找的那个节点不在它的左右子树中,则该节点也就...
求二叉树中两个节点的最远距离

求二叉树中两个节点的最远距离

问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。情况B: 路径不穿过根节点,而是左子树或右子树的最大距离路径,取其大者。思路:1,后序遍历每一节点,找出该节点到最右边的距离以及最左边的距离;2,找到之和最大的即可。//需保存左子树中最长距...
判断二叉树是否为完全二叉树

判断二叉树是否为完全二叉树

判断二叉树是否为完全二叉树。完全二叉树的定义是,前n-1层都是满的,第n层如有空缺,则是缺在右边,即第n层的最右边的节点,它的左边是满的,右边是空的。这个问题的描述已经提示了解法,采用广度优先遍历,从根节点开始,入队列,如果队列不为空,循环。遇到第一个没有左儿子或者右儿子的节点,设置标志位,如果之后再遇到有左/右儿子的节点,那么这不是一颗完全二叉树。这个方法需要遍历整棵树,复杂度为O(N),N为节点的总数。#include<iostream> ...
数据结构中各种排序的思路

数据结构中各种排序的思路

排序算法中的稳定和不稳定指的是什么?若在待排序的纪录中,存在两个或两个以上的关键码值相等的纪录,经排序后这些记录的相对次序仍然保持不变,则称相应的排序方法是稳定的方法,否则是不稳定的方法。内部排序和外部排序根据排序过程中涉及的存储器不同,可以讲排序方法分为两大类:一类是内部排序,指的是待排序的几率存放在计算机随机存储器中进行的排序过程;另一类的外部排序,指的是排序中要对外存储器进行访问的排序过程。内部排序是排序的基础,在内部排序中,根据排序过程中所依据的原...
为什么存在内存对齐

为什么存在内存对齐

说到内存对齐,很多人都知道是怎么回事。但是内存对齐该娘不是本文的重点,本文的重点是内存对齐有什么好处。CPU访问某个数据时,要求其存储地址必须是相应数据类型的自然边界。对于存储地址不在其相应类型自然边界的数据,不支持非对齐数据访问的CPU,会导致CPU异常;即使是支持非对齐数据访问的CPU,也会严重影响程序效率。假设非对齐访问出现在位于操作系统之上的进程,且CPU不支持非对齐数据访问,那么对于出现CPU异常的情况,可能操作系统会对其进行处理,(1)将所需要...
map实现之红黑树

map实现之红黑树

红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。红黑树是一种很有意思的...
后序遍历求解判断一颗二叉树是否为平衡二叉树

后序遍历求解判断一颗二叉树是否为平衡二叉树

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。有了求二叉树的深度的经验之后再解决这个问题,我们很容易就能想到一个思路:在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度。如果每个结点的左右子树的深度相差都不超过1,按照定义它就是一棵平衡的二叉树。这种思路对应的代码如下:bool IsBalanced(BinaryTreeNode* pRoot) ...
算法复杂度为O(N) 的排序算法

算法复杂度为O(N) 的排序算法

题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。分析:排序是面试时经常被提及的一类题目,我们也熟悉其中很多种算法,诸如插入排序、归并排序、冒泡排序,快速排序等等。这些排序的算法,要么是O(n2)的,要么是O(nlogn)的。可是这道题竟然要求是O(n)的,这里面到底有什么玄机呢?题目特别强调是对一个公司的员工的年龄作排序。员工的数目虽然有几万人,但这几万员工的年龄却只有几十种可能。上班早的人...
选择排序算法及其性能分析

选择排序算法及其性能分析

打算用python把所有的排序都写一遍。不过搞笑地是,才写了个简单的选择排序就遇到了不少问题。选择排序的基本原理这里就不讲了,可以参考维基百科。具体思路: 刚开始时按照自已的思路写的Slect_sorting1(),还停留在刚进大学的水平,主要问题是每次选择的时候都会交换此时找到的最小值,即产生了不必要的交换次数。 改进算法主要是将数组交换次数降到最低,Slect_sorting2()是中间出错的一个例子,贴出来有兴趣的可以看看,最后写出来的是Sl...
<< 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 >>