给定一棵有n个结点的二叉树的先序遍历与后序遍历序列,求其中序遍历序列。 若某节点只有一个子结点,则此处将其看作左儿子结点-笔试面试资料

这是qklbishe.com第13305 篇笔试面试资料
提供答案分析,通过本文《给定一棵有n个结点的二叉树的先序遍历与后序遍历序列,求其中序遍历序列。
若某节点只有一个子结点,则此处将其看作左儿子结点-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:
给定一棵有n个结点的二叉树的先序遍历与后序遍历序列,求其中序遍历序列。
若某节点只有一个子结点,则此处将其看作左儿子结点

C

给定一棵有n个结点的二叉树的先序遍历与后序遍历序列,求其中序遍历序列。    若某节点只有一个子结点,则此处将其看作左儿子结点 勇敢牛牛,不怕困难!

struct TreeNode* buildTree(int* pre, int* post, int i, int j, int n) {   if (n <= 0) return NULL;   struct TreeNode* root = (struct TreeNode*) malloc(sizeof(struct TreeNode));   root->val = *(pre + i);   root->left = root->right = NULL;   if (n == 1) return root;      int k = j;   while (*(post + k) != *(pre + i + 1)) ++k;   int l = k - j + 1; // the length of left sub tree       root->left  = buildTree(pre, post, i + 1, j, l);   root->right = buildTree(pre, post, i + 1 + l, k + 1, n - 1 - l);   return root; }  void inorderTraversal(struct TreeNode* root, int* ans, int* ansSize) {   if (!root) return;   inorderTraversal(root->left, ans, ansSize);   *(ans + (*ansSize)++) = root->val;   inorderTraversal(root->right, ans, ansSize); }  /**  * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可  *  *   * @param n int 二叉树节点数量  * @param pre int一维数组 前序序列  * @param preLen int pre数组长度  * @param suf int一维数组 后序序列  * @param sufLen int suf数组长度  * @return int一维数组  * @return int* returnSize 返回数组行数  */ int* solve(int n, int* pre, int preLen, int* suf, int sufLen, int* returnSize) {   *returnSize = 0;   int* ans = (int*) malloc(n * sizeof(int));   if (!ans) return NULL;      struct TreeNode* root = buildTree(pre, suf, 0, 0, n);   inorderTraversal(root, ans, returnSize);   return ans; }

今天 11:24:48 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 给定一棵有n个结点的二叉树的先序遍历与后序遍历序列,求其中序遍历序列。 若某节点只有一个子结点,则此处将其看作左儿子结点-笔试面试资料

提供最优质的资源集合

立即查看 了解详情