当前位置:   article > 正文

LeetCode 94. 二叉树的中序遍历_leecode二叉树的中序遍历root = [1,null,2,3]表示什么意思

leecode二叉树的中序遍历root = [1,null,2,3]表示什么意思

题目描述

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

示例:

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

输出: [1,3,2]

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

问题分析 1

递归解法,先从根节点的左孩子中序遍历,再访问根节点,最后从根节点的右孩子中序遍历。递归基是当节点为空时,返回。

代码实现 1

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. vector<int> inorderTraversal(TreeNode* root) {
  13. vector<int> ans;
  14. inorder(root, ans);
  15. return ans;
  16. }
  17. void inorder(TreeNode* root, vector<int>& ans){
  18. if(root == NULL)
  19. return;
  20. inorder(root->left, ans);
  21. ans.push_back(root->val);
  22. inorder(root->right, ans);
  23. return;
  24. }
  25. };

问题分析 2

迭代解法,创建一个栈,用来保存已经经过但还未遍历到的节点,先从根节点开始一直找左孩子,期间把每一个节点都压入栈,直到节点为空为止。这时从栈顶弹出一个节点,然后访问他,之后从他的右孩子开始,一直找左孩子,也是期间把每一个节点都压入栈,直到节点为空为止。如此循环,直到最后右孩子为空并且栈也为空时,中序遍历结束。返回ans。

代码实现 2

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. vector<int> inorderTraversal(TreeNode* root) {
  13. vector<int> ans;
  14. stack<TreeNode*> s;
  15. TreeNode* cur = root;
  16. while(cur || !s.empty()){
  17. while(cur){
  18. s.push(cur);
  19. cur = cur->left;
  20. }
  21. TreeNode* temp = s.top();
  22. s.pop();
  23. ans.push_back(temp->val);
  24. cur = temp->right;
  25. }
  26. return ans;
  27. }
  28. };

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50447?site
推荐阅读
相关标签
  

闽ICP备14008679号