LeetCode No.94 二叉树中序遍历

二叉树中序遍历

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

示例:

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

输出: [1,3,2]

题解分析

1.递归法很简单,跳过进入迭代法

  1. 分析中序遍历顺序:左子树 父节点 右子树,
  2. 且对左子树还要以 左子树的左子树 左子树 左子树的右子树的顺序递归下去
  3. 因此表现出来就是,一直左到底,然后输出左 返回父节点并输出,然后输出右子节点
    然后再返回到父节点的父节点,以此类推。

父节点同时也是父父节点的左子树,因此回溯上去的时候顺序是”父(左)-右“、”父(左)-右“

  1. 先进后出,存储结构使用
  2. 对root先往左压栈到底,然后出栈输出,并输出右节点,然后继续出栈。

题解代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector inorderTraversal(TreeNode* root) 
    {
        vector result;
        if(root==NULL)
            return result;
        stack mem;
        TreeNode* current=root;
        while(!mem.empty() || current)
        {
            //循环先把左树压栈
            while(current)
            {
                mem.push(current);
                current=current->left;
            }

            current=mem.top();//父节点(同时是父父节点左节点) 出栈
            result.push_back(current->val);//输出父节点(同时是父父节点左节点)
            current=current->right;//输出右节点
            mem.pop();//上去一层
        }
        return result;
    }

};

你可能感兴趣的:(LeetCode No.94 二叉树中序遍历)