既然已经分别找到了左、右子树的前序遍历序列和中序遍历序列,我们可用同样的方法分别去构建左右子树。所以,接下来的事情可用递归的方法去完成。
递归代码如下:
BinaryTreeNode* Construct(int* preorder, int *inorder, int length)
{
if (preorder == NULL || inorder == NULL || length...
分类:
其他好文 时间:
2015-07-02 22:36:19
阅读次数:
256
The recursive solution is trivial and I omit it here.Iterative Solution using Stack (O(n) time and O(n) space): 1 /** 2 * Definition of TreeNode: 3 .....
分类:
其他好文 时间:
2015-06-29 16:17:05
阅读次数:
106
1.已知二叉树的前序遍历跟中序遍历,求二叉树的后序遍历【例如】已知二叉树的前序遍历序列为cedba,中序遍历为debac,求该二叉树的后序遍历
【分析】由前序遍历可知,根节点为c,再根据中序遍历确定左子树为deba,右子树为空;根据前序遍历可知左子树deba的根节点为e,再根据中序遍历知deba中的左子树为d,右子树为ba;根据前序遍历可知右子树为ba的根节点为b,再根据中序遍历知ba的右子树为a...
分类:
其他好文 时间:
2015-06-28 12:41:37
阅读次数:
78
前序遍历(DLR)又叫先根遍历,先序遍历,前序周游.中序遍历(LDR)后序遍历(LRD)举例说明表达式的三种表示方式:(3 + 4) × 5 - 6 就是中缀表达式- × + 3 4 5 6前缀表达式3 4 + 5 × 6 -后缀表达式也可以理解成把符号缀在前中后.
分类:
其他好文 时间:
2015-06-24 22:24:47
阅读次数:
116
#include#includeusing namespace std;/*二叉树的前序遍历,按照 根节点->左孩子->右孩子*/typedef struct node{ char data; struct node *lchild,*rchild;}BinTree;void crea...
分类:
其他好文 时间:
2015-06-24 20:59:48
阅读次数:
123
对于二叉树,有前序、中序、后序三种遍历方法,由于树的定义本身就是递归定义的,故采用递归方法实现三种遍历简洁易懂。若采用非递归访问,则需要使用栈来模拟递归的实现。三种遍历的非递归算法中,前序和后序较容易,而后序相对较难。前序遍历递归非递归树的遍历中序遍历递归非递归后序遍历递归非递归层次遍历计算树高.....
分类:
其他好文 时间:
2015-06-18 19:01:43
阅读次数:
117
样例
给出中序遍历:[1,2,3]和前序遍历:[2,1,3].
返回如下的树:
2
/ 1
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* ...
分类:
其他好文 时间:
2015-06-14 16:41:30
阅读次数:
123
题意:输入一棵树的的前序遍历结果,以及中序遍历结果,求此树的后续遍历结果。思路:因为在后续遍历中,先访问左结点,再访问右结点,最后采访问根结点。那么根据前续遍历可以在中序遍历中找到树根,将其分为左右子树,再递归找子树的数根,将其分为左右子树,得到数根的顺序刚好是后续遍历的逆顺序。 如:DBACEG....
分类:
其他好文 时间:
2015-06-14 14:57:52
阅读次数:
122
1:前序遍历(根,左,右)递归的方法很简单:public static void pr(TreeNode root){ if(root!=null){ System.out.println(root.val); pr(root.left); pr(root.right); }} 非递归的方法:...
分类:
其他好文 时间:
2015-06-13 22:53:38
阅读次数:
156