中序遍历二叉树

给定一个二叉树,返回它的中序 遍历。

示例:

输入: [1,null,2,3]
   1
    \
     2
    /
   3

输出: [1,3,2]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

 

递归是真的简单。迭代的话用栈就可以了,我做的时候主要的问题是怎么才能保证循环的时候不再访问到之前的节点,因为头疼想了很久。。。其实只要每次加一个指针就好了。。这个指针不为空就入栈,然后指向节点的左子树,直到指针为空的时候就pop,再把指针指向pop出的节点的右子树,这样就不会访问到之前的节点。

下面是递归的解法,迭代是先做的忘保存了。。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
void toArray(struct TreeNode *root,int *a,int *size)
{
    if(!root)
        return ;
    if(root->left)
        toArray(root->left,a,size);
    a[(*size)++]=root->val;
    if(root->right)
        toArray(root->right,a,size);
}

int* inorderTraversal(struct TreeNode* root, int* returnSize) {
    int *a=(int *)malloc(sizeof(int)*1000);
    *returnSize=0;
    toArray(root,a,returnSize);
    return a;
}

 

posted @ 2018-07-16 16:32  onlyandonly  阅读(147)  评论(0编辑  收藏  举报