二叉树基本操作代码#include "stdafx.h"#include "stdlib.h"#include "string.h"#define MAX 100typedef char Elemtype;typedef struct BTNODE{ Elemtype data; BTN...
分类:
其他好文 时间:
2014-06-19 07:51:41
阅读次数:
251
题目:从上往下打印出二叉树的每个结点,从一层的结点按照从左往右的顺序打印。分析:类似于宽度优先搜索。可以采用队列来实现。 8 6 105 7 9 11依次打印:8,6,10,5,7,9,11首先我们获得根节点,每次打印根节点后,接下来就打印它的左右子树,如上图,先将8压入容器,接下...
分类:
其他好文 时间:
2014-06-18 22:56:51
阅读次数:
209
回溯法是设计递归的一种常用方法,它的求解过程实质上就是一个先序遍历一棵"状态树"的过程,只是这棵树不是遍历前预先建立的而是隐含在遍历过程中的。下面举一个例子:求含n个元素的集的幂集:集合A={ {1,2,3}, {1,2}, {1,3}, {1}, {2,3},{2},{3},{}}; /...
分类:
其他好文 时间:
2014-06-17 00:49:01
阅读次数:
302
二叉查找树(Binary Search Tree),也称二叉排序树(binary sorted tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值任意节点的左、右子树也分...
分类:
其他好文 时间:
2014-06-16 23:32:04
阅读次数:
199
给出一颗二叉树,找到两个值的最小公共节点。
假设两个值都会在树中出现。如果可能不会出现的话,也很简单,就查找一遍看两个值是否在树中就可以了。如果不在就直接返回NULL。
基本思想:就是在二叉树中比较节点值和两个值的大小,如果都在一边(左边或者右边)那么就往下继续查找,否则就是都在同一边了,那么就可以返回这个节点了,这个节点就是最低公共单亲节点了。
参考:http://www.geeksfor...
分类:
其他好文 时间:
2014-06-16 21:06:22
阅读次数:
235
二叉树的删除可以算是二叉树最为复杂的操作,删除的时候要考虑到很多种情况:
1.被删除的节点是叶子节点
2.被删除的节点只有左孩子节点
3.被删除的节点只有右孩子节点
4.被删除的有两个孩子节点
所以在删除的时候,这4种情况都必须考虑进去,并且这4中情况之下,还会有细的划分,下面就细说怎么删除。
在二叉树中想要删除一个节点,首先需要找到这个节点,由于二叉树在插入节点的时候会遵...
分类:
其他好文 时间:
2014-06-16 21:00:10
阅读次数:
190
不是BST,那么搜索两节点的LCA就复杂点了,因为节点是无序的。
下面是两种方法,都写进一个类里面了。
当然需要重复搜索的时候,可以使用线段树及多种方法加速搜索。
#include
#include
using namespace std;
class LCANormalTree
{
struct Node
{
int key;
Node *left, *right;...
分类:
其他好文 时间:
2014-06-16 20:20:04
阅读次数:
234
数组构造二叉树并打印本文地址: http://blog.csdn.net/caroline_wendy数组:构造二叉树, 需要使用两个队列(queue), 保存子节点和父节点, 并进行交换;打印二叉树, 需要使用两个队列(queue), 依次打印父节点和子节点, 并进行交换;二叉树的数据结构:struct BinaryTreeNode {
int m_nValue;
BinaryTreeNod...
分类:
其他好文 时间:
2014-06-16 19:45:17
阅读次数:
373
情形1:树是搜索二叉树
思路:从树的根节点开始遍历,如果根节点的值大于其中一个节点,小于另外一个节点,则根节点就是最低公共祖先。否则如果根节点的值小于两个节点的值,则递归求根节点的右子树,如果大于两个节点的值则递归求根的左子树。如果根节点正好是其中的一个节点,那么说明这两个节点在一条路径上,所以最低公共祖先则是根节点的父节点
public static BinaryTreeNode get...
分类:
其他好文 时间:
2014-06-16 19:02:59
阅读次数:
394
2014.06.15 22:14简介: 堆是一种非常实用的数据结构,其中以二叉堆最为常用。二叉堆可以看作一棵完全二叉树,每个节点的键值都大于(小于)其子节点,但左右孩子之间不需要有序。我们关心的通常只有堆顶的元素,而整个堆则被封装起来,保存在一个数组中。图示: 下图是一个最大堆: 实现: 优...
分类:
编程语言 时间:
2014-06-16 13:16:58
阅读次数:
230