AB17 从中序与后序遍历序列构造二叉树

 

/**
 * struct TreeNode {
 *  int val;
 *  struct TreeNode *left;
 *  struct TreeNode *right;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param inorder int整型一维数组 中序遍历序列
 * @param inorderLen int inorder数组长度
 * @param postorder int整型一维数组 后序遍历序列
 * @param postorderLen int postorder数组长度
 * @return TreeNode类
 */


struct TreeNode* buildTree(int* inorder, int inorderLen, int* postorder,
                           int postorderLen )
{
    if (inorderLen == 0)return NULL;  //树为空

    struct TreeNode*T=(struct TreeNode*)malloc(sizeof(struct TreeNode));
    T->val = postorder[postorderLen - 1];   //树不为空创建根节点
    int LeftNum = 0, RightNum = 0;  //存储左右子树结点个数
    int i=0;

 //根据后序遍历可知,后序遍历的最后一个元素是根节点(并且在左右子树中也是如此)
//中序遍历根节点左边的结点是左子树的结点,右边的结点是右子树的结点
        while(postorder[postorderLen-1]!=inorder[i]) 
        {
            i++;  //遍历中序的数组直到找到根节点,i记录下左子树结点的个数
        }
        LeftNum=i;  //此时i是根结点的下标,是左子树的结点个数
        RightNum=inorderLen-i-1; 
    T->left=buildTree(inorder,LeftNum,postorder,LeftNum);//递归建立左子树
    T->right=buildTree(inorder+i+1,RightNum, postorder+i,RightNum);//递归建立右子树
    return T;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值