码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 94. 二叉树的中序遍历

时间:2018-12-11 12:55:26      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:logs   turn   vector   中序   pop   while   的区别   roo   迭代   

1.问题描述

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

示例:

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

输出: [1,3,2]

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

2.解法一:递归

中序遍历:L--N--R (左--根--右)

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        if(root){
            inorderTraversal(root->left);  //
            res.push_back(root->val);     //
            inorderTraversal(root->right);//
        }    
            return res;
    }
private:
    vector<int> res;
};

 

3.递归与迭代的区别

  • 递归:A反复调用A自身
  • 迭代:A不停调用B (B是利用变量的原值推算出变量的一个新值)
注意:
(1)递归中一定有迭代,但是迭代中不一定有递归;
(2)能使用迭代尽量使用迭代

 

4.解法二:非递归(栈)

/**
 * 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<int> inorderTraversal(TreeNode* root) {
        stack<TreeNode*> s;
        //s.push(root);
        TreeNode* cur = root;//
    
    //L--N--R
    while(cur || !s.empty())
        if(cur){
            s.push(cur);
            cur = cur->left; //先走到最左子树         
        }
        else{
            res.push_back(s.top()->val);
            cur = s.top()->right;
            s.pop();
        }
        return res;
    }
private:
    vector<int> res;
};

 

参考资料:

1.https://blog.csdn.net/swliao/article/details/5337896 递归与迭代的区别

2.https://www.cnblogs.com/ariel-dreamland/p/9159638.html

Leetcode 94. 二叉树的中序遍历

标签:logs   turn   vector   中序   pop   while   的区别   roo   迭代   

原文地址:https://www.cnblogs.com/paulprayer/p/10101272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!