前言:
此刻各位老铁们对“先序中序遍历构造二叉树的伪代码”大体比较关注,看官们都想要了解一些“先序中序遍历构造二叉树的伪代码”的相关文章。那么小编也在网络上收集了一些关于“先序中序遍历构造二叉树的伪代码””的相关文章,希望朋友们能喜欢,大家一起来学习一下吧!需求描述:给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树并返回其跟结点
解题思路分析:二叉树多用递归,根据先序遍历的特点,可知preorder的第一个数组元素是根节点,知道根节点的值,然后去inorder数组中找到其位置i,其中i之前的元素属于它左子树这一枝,i之后的元素属于它右子树这一枝;可以获取其左子树的中序遍历的长度,可以获取其右子树的中序遍历的长度,得到长度后,再去preorder数组中找到其左子树的先序遍历的长度,其右子树的先序遍历的长度,一直这样递归下去,就能获取完整的二叉树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */#pragma mark - 从前序与中序遍历序列构造二叉树struct TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize) { if(preorderSize ==0 || inorderSize == 0) return NULL; struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode)); root->val = preorder[0]; int i ; for(i=0;i<inorderSize;i++) { if(inorder[i] == preorder[0]) break; } root->left = buildTree(preorder + 1, i, inorder, i); root->right = buildTree(preorder + 1 + i, preorderSize - 1 - i, inorder + i + 1, preorderSize - 1 - i); return root;}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #先序中序遍历构造二叉树的伪代码