- 博客(5)
- 资源 (2)
- 收藏
- 关注
原创 根据先序和中序遍历重建二叉树
思路: 关键在每次读取两个数组的范围问题:in(中序遍历数组)的边界比较好确定:有左子树时为[start2,i-1]; 有右子树时为[i+1,end2]pre(先序遍历数组)的边界要根据in确定:有左子树时根据aft和i求出左子树节点个数为:i-start2。所以pre的边界就要包括接下来的i-start2个节点,即:从start1+1到start1+(i-start2)此
2013-09-04 10:04:43
503
原创 根据后序和中序遍历重建二叉树
思路:与已知前序遍历的区别在于后序序列要从后向前的顺序建立。因为前序遍历根节点在其所有子树的前面,而后序遍历的根节点在其所有字数的后面。关键在边界问题:1) in的边界比较好确定: 有左子树时为[start2,i-1];有右子树时为[i+1,end2]2) aft的边界要根据aft确定: 有左子树时根据aft和i求出左子树节点个数为:i-start2。所以pre的边界就
2013-09-04 01:18:18
622
原创 二叉树两个结点的最低公共祖先
问题:求一个普通二叉树中两个节点的公共祖先。解决办法基于先序遍历,需要一个辅助栈存储两个节点的所有公共祖先。函数传入的两个节点参数为节点值,也可根据需要改为节点指针(需要预先判断是否为空),不影响整个过程。结果会包括以下特殊情况:(1)给出的二叉树为空;(2)给出的两个节点至少有一个不在二叉树中;(3)其中一个节点为另一个节点的孩子节点,此时公共祖先为后者的父节点;(4)两个节
2013-08-14 23:13:27
542
原创 《编程之美》——求二叉树中节点的最大距离(非递归)
这里给出书中扩展问题提出的非递归解法。就像书中总结的时候给出的叶先生博客中关于本题的解法,这里同样不需要在节点中嵌入nMaxLeft、nMaxRight等额外数据。主要原理是基于非递归后续遍历二叉树。额外需要两个栈:一个用于遍历二叉树,另一个用于临时存储以当前节点为根节点的子树的最大深度。当然也可以采取改变结点值来存储最大深度,不过这样虽然简单但并不实用。下面是代码请您感受下:
2013-08-14 16:48:37
709
原创 《编程之美》——中国象棋将帅问题
即将面临找工作,最近在看《编程之美》这本书。自己能力有限所以觉得有些题目难度不小,但仍觉受益匪浅,有时间一定再读几遍。下面是关于“中国象棋将帅问题”的一些心得: 书中给出的算法的精妙之处这里不再赘述,给出自己的想法:原理与书中给出算法相同,通过循环实现。对其中的任意一个位置k,其余8个位置都可以用k与1到8这8个数字的和对9取模来表示(其中和为0的情况要特殊处理)。
2013-07-15 16:43:22
719
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人