树
文章平均质量分 77
notishell
这个作者很懒,什么都没留下…
展开
-
重建二叉树
二叉树有前序、中序、后序三种遍历方法,如果知道了其中两种的遍历结果,是不是就可以重建原来的二叉树呢?当然这里是有前提的,二叉树的节点不能有相同的,不然有可能无法还原! 已知前序和中序 前序遍历结果的第一个元素是原二叉树的根,接下来的是左子树和右子树的前序遍历结果。中序遍历结果中根左边的是左子树的中序遍历结果,右边的是右子树的中序遍历结果!我们可以将问题转换为两个子问题,采用递归的方法很容易求解原创 2013-08-08 23:26:26 · 624 阅读 · 0 评论 -
二叉树中节点的最大距离
二叉树也是一个图,虽然在一般的图中求解简单最长路径问题非常困难,但是在二叉树中却比较简单!我们甚至可以在线性时间内解决问题! 二叉树中距离最长的两个节点一定是叶子节点或根节点,假设有一个节点不是叶子节点或根节点,那么其父亲或者其儿子到另外一个节点的距离比最大距离要大,所以假设错误。如果距离最长的两个节点有一个是根,那么最长距离就等于树的高,而且根只有一个儿子,否则一定存在更长的距离。对于某一个节原创 2013-08-08 23:15:38 · 756 阅读 · 0 评论 -
二叉查找树转变为排序的双向链表
问题:对于输入的一棵二叉查找树,将该二叉查找树转换成一个排序的双向链表,要求不能创建任何新的结点,只调整指针的指向来达到目的。 目测这个问题不难解决,应该可以在O(n)的时间复杂度内解决。对于一个二叉查找树,转换为一个从小到大排序的链表,那么根节点的左儿子及其子孙都会在根节点的前面,根节点的右儿子及其子孙都会在根节点的后面。这样,一个递归的算法便可以解决问题。按照这个思路我把代码写了出来,验证结原创 2013-08-08 22:44:03 · 654 阅读 · 0 评论 -
按层遍历二叉树
按层遍历二叉树是广度优先的算法,这个算法需要一个队列,最开始将根节点入队,然后处理队列,直到队列为空,这样就处理完了整棵树。 好吧,看起来广度优先遍历是这么的简单,与深度优先不同,广度优先使用队列,见下面的代码。处理一个节点时,如果该节点有左儿子将左儿子入队,如果有右儿子将右儿子入队,这样就会按距离遍历完所有的节点。 #include #include #include using na原创 2013-08-08 23:09:34 · 707 阅读 · 0 评论 -
找出二叉树中和为某值的所有路径
问题是这样的,在一棵以root为根的树中,找出以root为起点的所有路径,要求路径中节点的值相加等于给定的数值。这个问题很简单,甚至于相都不用想就知道遍历树一遍就可以解决。 找出符合要求的路径,其实就是下面这个递归表达式: 1.求出以root为节点和等于v的路径; 2.如果root->value等于v,那么找到一条路径,返回; 3.如果root->value大于v,那么就分别找出以root原创 2013-08-08 23:01:24 · 695 阅读 · 0 评论