题目描述
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
白话题目:
算法:
详细解释关注 B站 【C语言全代码】学渣带你刷Leetcode 不走丢 https://www.bilibili.com/video/BV1C7411y7gB
C语言完全代码
void inorder(struct TreeNode* root,int* returnSize,int *a)/*中序遍历二叉树*/
{
if(!root) return;
inorder(root->left,returnSize,a);
a[(*returnSize)++]=root->val;
inorder(root->right,returnSize,a);
}
int size(struct TreeNode* root)/*求二叉树数据个数*/
{
if(!root) return 0;
return size(root->left)+size(root->right)+1;
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
int treesize=size(root);
int *a=(int*)malloc(treesize*sizeof(int));
memset(a,0,treesize);
*returnSize=0;
inorder(root,returnSize,a);
return a;
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
struct TreeNode **a=(struct TreeNode**)malloc(sizeof(struct TreeNode*)*1000);
int *b=(int*)malloc(sizeof(int)*10000);
int i=0,top=0;
struct TreeNode *p=NULL;
a[0]=root;/*根指针进栈*/
while(top!=-1){
while(a[top]!=NULL) a[++top]=a[top]->left;/*向左走到尽头*/
top--;/*退出空指针*/
if(top!=-1){
p=a[top];
b[i++]=p->val;
a[top]=p->right;
}
}
*returnSize=i;
return b;
}