__七把刀__

新的文章请移步简书查看 http://www.jianshu.com/u/4d4a2f26740b

判定两棵二叉树是否同构

题目描述 给定两棵二叉树,根结点为t1和t2,判定这两棵二叉树是否同构。所谓二叉树同构就是指它们的结构相同。   分析 为了判定是否同构,可以考虑递归来解决。代码比较简单,如下所示 bool isomorphism(Node* t1, Node* t2) { if(...

2012-10-13 21:03:15

阅读数 2872

评论数 0

完全二叉树的判定

问题描述 判定一棵二叉树是否是完全二叉树。二叉树定义如下: struct node { int data; struct node* left; struct node* right; }; typedef struct node Bina...

2012-10-05 23:08:41

阅读数 2004

评论数 0

找出二叉树中最大的子树,且子树为二叉搜索树

题目 找出二叉树中最大的子树,该子树为二叉搜索树。所谓最大的子树就是指结点数目最多的子树。 分析 该题目是要找出二叉树中最大的子树,该子树必须是二叉搜索树(BST)。子树的概念需要重点关注一下,以下面一棵二叉树为例          ____10____ / ...

2012-10-05 22:16:09

阅读数 2823

评论数 0

二叉树中节点的最大距离

《编程之美: 求二叉树中节点的最大距离》的另一个解法 原文地址:http://www.cnblogs.com/miloyip/archive/2010/02/25/1673114.html 昨天花了一个晚上为《编程之美》,在豆瓣写了一篇书评《迟来的书评和感想──给喜爱编程的朋友》。书评...

2012-10-05 20:03:37

阅读数 1625

评论数 0

二叉搜索树转换成有序的双向循环链表(一)

题目描述 给定一棵二叉排序树(BST),将该树转换成一棵双向循环链表。请看下面的图示说明,你可以更清楚的了解题意。 BST的结构定义如下: struct node { int data; struct node* left; struct node* right; }...

2012-09-03 22:46:53

阅读数 2855

评论数 0

二叉树两结点最低公共祖先结点(二)

问题 在前面的文章二叉树两结点最低公共祖先结点(一) 中有探讨过这个问题,不过本文考虑的是另外一种二叉树,该二叉树每个结点包含一个指向父结点的指针,根结点的父结点为NULL。其结构如下: struct node { int data; s...

2012-09-03 17:37:22

阅读数 2301

评论数 2

二叉搜索树两结点最低公共祖先结点

题目 给定一棵二叉搜索树(BST),找出树中两个结点的最低公共祖先结点(LCA)。二叉搜索树结点定义: struct node { int data; struct node* left; struct node* rig...

2012-09-03 16:29:42

阅读数 2407

评论数 2

二叉树两结点的最低公共祖先结点(一)

题目 二叉树结点的定义如下: struct node { int data; struct node* left; struct node* right; }; 给定二叉树中的两个结点,输出这两个结点的最低公共祖先结点(LCA)。注意,该二叉树不一定是二叉搜索...

2012-09-02 23:01:42

阅读数 7798

评论数 4

将有序单链表转换为平衡的二叉搜索树

题目: 给定一个升序排列的有序单链表,将其转换为一棵平衡的二叉搜索树。 分析: 单链表的结点结构如下。 struct node { int data; struct node *next; };由于单链表升序排列,可以参照前面的文章将有序数组转换为平衡二叉搜索...

2012-08-15 08:51:48

阅读数 2461

评论数 0

将有序数组转换为平衡二叉搜索树

问题 给定一个有序数组,数组元素升序排列,试将该数组转换为一棵平衡二叉搜索树(Balanced Binary Search Tree)。   思路 这个问题用递归很容易解出来。考虑下面一棵二叉搜索树: 这是一棵平衡的二叉搜索树,所谓平衡的定义,就是指二叉树的子树高度之差不能超过1。 ...

2012-07-26 08:27:04

阅读数 7851

评论数 0

中序遍历和先序遍历/后序遍历构建二叉树

1、问题 给定二叉树的2个遍历序列(如先序+中序,先序+后序,中序+后序等),是否能够根据这2个遍历序列唯一确定二叉树? 2、理论分析 数据结构的基础知识中重要的一点就是能否根据两种不同遍历序列的组合(有三种:先序+中序,先序+后序,中序+后序),唯一的确定一棵二叉树。然后就是根据二叉树的不...

2012-07-25 15:02:23

阅读数 24536

评论数 14

序列化/反序列化二叉树

题目 设计一个算法能够实现序列化和反序列化一棵二叉树(注意,不是二叉搜索树BST)。这里的序列化指的是将一棵二叉树保存到文件中,反序列化就是从文件中读取二叉树结点值重构原来的二叉树。 思路 前一篇文章保存二叉搜索树到文件中  解决了保存一棵二叉搜索树到文件中的问题,但是由于本题目的意...

2012-07-24 08:48:47

阅读数 12720

评论数 0

保存二叉搜索树到文件中

问题: 设计一个算法,将一棵二叉搜索树(Binary Search Tree,BST)保存到文件中,需要能够从文件中恢复原来的二叉搜索树。注意算法的时空复杂度。 思路: 二叉树遍历算法有先序遍历、中序遍历、后序遍历算法等。但是它们中间只有一种遍历算法符合题目条件,用于保存BST到文件...

2012-07-23 11:28:10

阅读数 5104

评论数 0

二叉树遍历之非递归算法

在前一篇文章二叉树遍历递归算法对二叉树遍历的递归算法做了总结,这篇文章就来对二叉树遍历的非递归算法做个汇总。还是与上一篇文章一样的顺序,一一汇总先序、中序、后序以及层序遍历的非递归算法。 1、先序遍历(非递归算法) 先序遍历非递归访问,使用栈即可实现。先序遍历的非递归访问在所有的遍历中...

2012-07-22 22:30:26

阅读数 22677

评论数 20

二叉树遍历之递归算法

二叉树的遍历算法有多种,典型的有先序遍历、中序遍历、后序遍历以及层序遍历。而且这些遍历的递归算法较为简单,代码很少,容易实现,本文就是汇总二叉树遍历的递归算法,非递归算法将在下一篇文章中进行总结。本文中用到的二叉树实例如下: 3 / \ 9 20 / \...

2012-07-22 19:31:35

阅读数 9544

评论数 3

判定一棵二叉树是否是二叉搜索树

问题 给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)? 解法1:暴力搜索 首先说明一下二叉树和二叉搜索树的区别。二叉树指这样的树结构,它的每个结点的孩子数目最多为2个;二叉搜索树是一种二叉树,但是它有附加的一些约束条件,这些约束条件必须对每个结点...

2012-07-21 20:18:05

阅读数 16781

评论数 5

二叉树问题汇总(2)—常见问题

在上一篇二叉树问题汇总(1)中总结了下二叉树的一些基本问题,主要是针对二叉排序树。这篇文章主要汇总二叉树的一些常见的但是难度稍大一点的问题。 1、判定二叉树是否存在和为给定值的路径 问题: 给定一个值,判定二叉树是否存在从根结点到叶结点的路径,其结点的数据之和为该值。 比如二叉树如下所示,...

2012-07-19 21:43:49

阅读数 1680

评论数 0

二叉树问题汇总(1)—基础问题

1、创建二叉搜索树 二叉搜索树是排序的二叉树,即左子树的值都不大于根结点,右子树的值都比根结点大。插入结点到一颗二叉搜索树可以使用递归或者非递归方法。使用递归方法代码简单,使用非递归则易于理解。 二叉搜索树BST定义: struct node { int data; stru...

2012-07-19 21:09:44

阅读数 1848

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭