
二叉树
HankingHu
这个作者很懒,什么都没留下…
展开
-
二叉树的遍历(篇5)由中序和先序序列重建二叉树
让我们考虑下面的遍历:中序序列:DBEAFC 前序序列:ABDECF在Preorder序列中,最左侧的元素是树的根。所以我们知道’A’是给定序列的根。通过在Inorder序列中搜索’A’,我们可以发现’A’左侧的所有元素都在左子树中,右侧的元素在右子树中。所以我们现在知道下面的结构。 A / \ /原创 2017-03-15 16:58:32 · 801 阅读 · 0 评论 -
二叉树的遍历Java实现
使用Stack 遍历树而不递归。下面是使用堆栈遍历二叉树的算法。1)创建一个空栈S.2)以root身份初始化当前节点3)将当前节点推送到S,并设置current = current-> left,直到current为NULL4)如果current为NULL,堆栈不为空 a)从堆栈中弹出顶部元素。 b)打印弹出的元素,设置current = popped_item-> ri原创 2017-03-15 15:23:33 · 1168 阅读 · 0 评论 -
笔试面试算法经典--二叉树的镜像-递归与非递归实现(Java)
给出一棵二叉树,求它的镜像,如下图:右边是二叉树是左边二叉树的镜像。解法1(递归)思路1:如果当前节点为空,返回,否则交换该节点的左右节点,递归的对其左右节点进行交换处理。public static void mirrorTree(TreeNode root) { if(root==null) return; //交换该节点指向的左右节原创 2017-04-10 19:04:41 · 8014 阅读 · 3 评论 -
笔试面试算法经典--二叉树的子结构(Java)
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构(空树不是任意一个树的子结构)。下图中:右边的二叉树是左边二叉树的子结构解法: 先序遍历 A树,如果当前节点与 B树的根节点相同,则判断 B 是不是 A的子树,判断 B是 A 的子树的也用递归:比较 B 的左子树 是否是 A 左子树的子结构,B 的右子树是否是 A的右子树的子结构。因此需要两个函数来进行,一个函数来进行先序遍历,一个来判断是否原创 2017-04-11 14:34:03 · 1863 阅读 · 0 评论 -
笔试面试算法经典--判断二叉树是否是平衡二叉树(Java)
平衡二叉树(Balanced Binary Tree)又被称为AVL树,且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。如下面的三棵树:只有中间才是平衡二叉树。解法: 思路1:从根节点开始,求出根的左右子树的高度,如果根的左右子树的高度差大于1,返回FALSE,否则递归的判断根的左子树和右子树是否满足条件。class TreeNode{原创 2017-04-11 22:40:54 · 4063 阅读 · 2 评论 -
笔试面试算法经典--二叉搜索树转有序的双向链表(Java)
题目: 输入一棵二叉搜索树,将该二叉搜索树转换为一个排序的双向链表。要求:不能创建任何新的结点,只能调整树中结点指针的指向。如下图:解法1(非递归): 思想:二叉搜索树的中序遍历是一个有序的数组,在中序遍历的时候,用 Pre 指针保存前一个节点,当访问到当前节点的时候,将 Pre 节点右指针,指向当前节点,当前节点的左指针指向 Pre。 这样中序遍历完二叉搜索树,就产生了一个双向链表。publi原创 2017-04-11 23:07:25 · 3134 阅读 · 0 评论 -
笔试面试算法经典--二叉树层次打印
【题目描述】 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。例如下面的树输出为: 12 5 18 2 9 15 19 17 16解法: 用队列来保存每层的节点,使用层次遍历,记录每层节点的个数,每层节点的个数其实是当前队列中没有加入任何子节点是队列的大小,然后将一行全部输出的同时将其子节点加入到队列。如上面图中,先原创 2017-04-12 22:49:11 · 2242 阅读 · 0 评论 -
Java 创建二叉树并遍历
public class BinaryTree { private Node root; /** * * 内部节点类 * @author yhh */ private class Node{ private Node left; private Node right;原创 2017-02-18 21:27:44 · 885 阅读 · 0 评论 -
二叉搜索树(篇1)判断数组是不是二叉搜索树后序遍历的结果
二叉搜索树(Binary Search Tree), 它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。上图中的二叉搜索树的后序遍历在数组中是:2 9 5 15 16 17 19 18 12思路: 数组中的最后一个节点是树的根节点,根节点原创 2017-03-18 10:05:17 · 1196 阅读 · 0 评论 -
二叉树的遍历(篇2)计算二叉树节点的个数
树的大小是树中存在的元素的数量。下面的树的大小是5。使用 Size()函数递归计算树的大小。它的工作原理如下: 树的大小=左子树的大小+ 1 +右子树的大小算法:size(树)1.如果树是空的,则返回02.否则 (a)递归获取左子树的大小,即调用 size(tree-> left-subtree) (a)递归获取右子树的大小,即调用原创 2017-03-15 11:22:41 · 3266 阅读 · 0 评论 -
二叉树的遍历(篇4)判断从根到叶节点的和是否等于某个给定的值
给定二叉树和一个数sum,如果从树的根开始到叶节点的值等于sum,则返回true。 如果没有找到这样的路径,则返回false。例如, 在上述树根到叶节点存在具有以下和。21 - > 10 - 8 - 3 23 - > 10 - 8 - 5 14 - > 10 - 2 - 2因此,返回的值应该只对数字21,23和14. true。对于任何其他数字,返回值应该为false。算法: 递归检查左原创 2017-03-15 16:12:23 · 1425 阅读 · 0 评论 -
二叉树的遍历(Java)
树可以以不同的方式遍历。以下是遍历树的常用方法。深度优先遍历:(a)中序遍历(左、根、右):4 2 5 1 3 (b)先序遍历(根、左、右):1 2 4 5 3 (c)后序遍历(左、右、根) :4 5 2 3 1广度优先或水平顺序遍历: 1 2 3 4 5 先序遍历 算法Inorder(树) 1.遍历左子树,即调用Inorder(left-subtree) 2.访问根节点。原创 2017-03-15 11:09:59 · 805 阅读 · 0 评论