1:递归代码
void midTraversal(struct TreeNode *root,int *ret,int *returnSize)
{
if(root)
{
midTraversal(root->left,ret,returnSize);//先中序访问左子树
ret[(*returnSize)++]=root->val;//中序访问左子树之后,访问并计入数组根节点
midTraversal(root->right,ret,returnSize);//最后中序访问右子树
}
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
int *ret=(int *)malloc(sizeof(int)*100);
*returnSize=0;
midTraversal(root,ret,returnSize);
return ret;
}
2:迭代思想
1:因为中序遍历是先处理左子树,然后处理中间节点,最后处理右子树。左右子树也是相同的处理方式。
2:其实迭代要做的只有两件事,:把延迟处理的先放入栈中,先处理的后放入栈中;要处理的弹出栈。
3:最后处理的是中间节点和右子树,应该先将右子树放入栈中,再将根节点放入栈中,但是右子树明显是可以用根节点表示的,如果我们只将根节点放入栈中,当根节点出栈处理的时候,将用根节点表示的右子树放入栈中,是不是也达到了先处理根节点,再处理右子树的目的。
4:我们应该最后将左子树放入栈中(注意左子树用左子树的根节点代替),现