首页 > 代码库 > 二叉树(14)----由前序遍历和中序遍历重建二叉树
二叉树(14)----由前序遍历和中序遍历重建二叉树
1、二叉树定义
typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t;
二、根据前序遍历序列和中序遍历序列重建二叉树
算法说明:
由中序遍历序列可知,第一个节点是根节点,
由前序遍历序列可知,第一个节点是根节点的左子树节点,而且前序遍历中,根节点左边是左子树,右边是右子树,因此通过中序遍历的根节点可以确定的是:
根节点在前序遍历中的位置(通过遍历中序遍历序列比较可知);
左子树的节点数,因为一旦找到前序遍历中根节点的位置,就找到左右子树的分界点,也就是说,前序遍历中根节点左边的都是左子树节点,可以通过遍历知道左子树的节点数;
同样,右子树的节点数也可以确定。
通过以上确定的信息,可以划分出前序遍历中的左右子树节点数,根节点位置。
通过递归可以求得整个树的结构。
BTreeNode_t * RebuildBTree( const BTreeNodeElement_t *pPreorder, const BTreeNodeElement_t *pInorder, const int nodesTotal, int(*compare)(const BTreeNodeElement_t*, const BTreeNodeElement_t *)){ if( pPreoder == NULL || pInorder == NULL || nodesTotal <= 0 || compare == NULL) return NULL; BTreeNodeElement_t *pRootData = http://www.mamicode.com/pInorder[0]; //找到当前树的根节点>二叉树(14)----由前序遍历和中序遍历重建二叉树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。