LoveFM

导航

2011年11月29日 #

定义栈的数据结构____<2>

摘要: 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。 要求函数min、push以及pop的时间复杂度都是O(1)。 无论使用链表还是数组实现的栈,push和pop操作的时间复杂度都是O(1)。所以,难点在于实现min使其时间复杂度也是O(1)。该堆栈需要新增一个元素minPoint指针。假设目前minPoint指针指向最小元素,push(data),若data比minPoint指向的元素还小,那么minPoint指向data。再pop(),此时minPoint指向的最小元素不再存在于堆栈中,需要修改minPoint指针。因此,仅仅依靠一个minPoint指针无法顺利实现功能。... 阅读全文

posted @ 2011-11-29 22:05 LoveFM 阅读(3560) 评论(0) 推荐(0) 编辑

LevelOrderBTree

摘要: 1 #include<iostream> 2 #include<deque> 3 #include<stdlib.h> 4 using namespace std; 5 6 static int k=1; 7 8 struct BinaryTreeNode{ 9 BinaryTreeNode* m_pLeft; 10 BinaryTreeNode* m_pRight; 11 int m_nValue; 12 }; 13 14 15 //从上到下的层次访问该二叉树(每一层将单独输出一行)... 阅读全文

posted @ 2011-11-29 20:34 LoveFM 阅读(233) 评论(0) 推荐(0) 编辑

SearchBTreePath____<4>

摘要: 1 /* 2 * SearchBTreePath.cpp 3 * 4 当访问到某一结点时,把该结点添加到路径上,并累加当前结点的值。 5 如果当前结点为叶结点并且当前路径的和刚好等于输入的整数,则当前的路径符合要求,我们把它打印出来。 6 7 如果当前结点不是叶结点,则继续访问它的子结点。当前结点访问结束后,递归函数将自动回到父结点。 8 因此我们在函数退出之前要在路径上删除当前结点并减去当前结点的值, 9 以确保返回父结点时路径刚好是根结点到父结点的路径。 10 11 我们不难看出保存路径的数据结构实际上是一个栈结构,因为路径要与递归调用状态一致, 12 而递归调... 阅读全文

posted @ 2011-11-29 20:18 LoveFM 阅读(234) 评论(0) 推荐(0) 编辑

BinaryTreeConvertToDoubleList____<1>

摘要: 1 /* 2 * BtreeToDoublelist.cpp 3 4 * 思路:我们可以中序遍历整棵树。按照这个方式遍历树,比较小的结点先访问。 5 * 如果我们每访问一个结点,假设之前访问过的结点已经调整成一个排序双向链表, 6 * 我们再把调整当前结点的指针将其链接到链表的末尾。当所有结点都访问过之后, 7 * 整棵树也就转换成一个排序双向链表了。 8 */ 9 10 using namespace std; 11 #include <stdio.h> 12 #include <iostream> 13 14 struct BSTreeNode... 阅读全文

posted @ 2011-11-29 20:12 LoveFM 阅读(484) 评论(0) 推荐(0) 编辑

(百度笔试)简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点

摘要: 二叉树的遍历:D:访问根结点,L:遍历根结点的左子树,R:遍历根结点的右子树。给定一棵二叉树的前序遍历序列和中序遍历序列可以惟一确定一棵二叉树。二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。深度优先遍历二叉树。1. 中序遍历(LDR)的递归算法:若二叉树为空,则算法结束;否则: 中序遍历根结点的左子树; 访问根结点; 中序遍历根结点的右子树。2. 前序遍历(DLR)的递归算法:若二叉树为空,则算法结束,否则: 访问根结点; 前序遍历根结点的左子树; 前序遍历根结点的右子树。3. 后序遍历(LRD)的递归算法:若二叉树为空,则算法结束,否则: 后序遍历 阅读全文

posted @ 2011-11-29 16:16 LoveFM 阅读(6929) 评论(0) 推荐(0) 编辑