leetcode 94.二叉树的中序遍历(非递归和递归遍历)

news/2024/7/5 3:08:17

94. 二叉树的中序遍历 - 力扣(LeetCode) 

代码随想录 (programmercarl.com)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
// 递归遍历
class Solution {
public:
    void traversal(TreeNode* cur,vector<int>& vec) {
        if(cur == NULL) return;
        traversal(cur->left,vec);
        vec.push_back(cur->val);
        traversal(cur->right,vec);
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> vec;
        traversal(root,vec);
        return vec;
    }
};

// 非递归遍历
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        stack<TreeNode*> st;
        TreeNode* cur = root;
        while(cur || !st.empty()) {
            // 指针来访问节点,访问到最底层
            if(cur) {
                st.push(cur);// 将访问的节点放进栈
                cur = cur->left;                // 左
            } else {
                cur = st.top(); // 从栈里弹出的数据,就是要处理的数据(放进result数组里的数据)
                st.pop();
                res.push_back(cur->val);
                cur = cur->right;               // 右
            }
        }
        return res;
    }
};

/*
          5 
   4               6
1     2

// 第一步
--------------------------------------------
| 5 4 1 
--------------------------------------------

// 第二步
--------------------------------------------
| 5 4 
--------------------------------------------

1

// 第三步
--------------------------------------------
| 5 2
--------------------------------------------

1 4 

// 第四步
--------------------------------------------
| 5 
--------------------------------------------

1 4 2

// 第五步
--------------------------------------------
| 6
--------------------------------------------

1 4 2 5

// 第六步
--------------------------------------------
| 
--------------------------------------------

1 4 2 5 6

*/


http://lihuaxi.xjx100.cn/news/1559432.html

相关文章

974. 和可被 K 整除的子数组

974. 和可被 K 整除的子数组 C代码&#xff1a;哈希表前缀和 typedef struct{int val;int cnt;UT_hash_handle hh; } HashTable;int subarraysDivByK(int* nums, int numsSize, int k){HashTable* head NULL;HashTable* out NULL;int sum 0;int cnt 0;out (HashTable*)ma…

卡尔曼滤波(Kalman Filter)C#测试

一、操作过程 刚学了一下卡尔曼滤波&#xff0c;具体原理还没细看&#xff0c;大致过程如下 分为两步&#xff0c;第一步Predict&#xff0c;以下两个公式 第二步Correct&#xff0c;以下三个公式 公式看起来很复杂&#xff0c;其中是我们要处理的数据&#xff0c; 是滤…

正则表达式新解

文章目录 是什么&#xff1f;正则用法匹配单个字符匹配一组字符其他元字符核心函数 贪婪匹配和非贪婪匹配正则练习 是什么&#xff1f; 正则表达式(Regular Expression)是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊…

离散数学之 一阶逻辑等值演算与推理

一阶逻辑等值式与置换规则 基本等值式 这里用到了量词辖域的收缩 未完待续

从电大搜题到上海开放大学,广播电视大学引领学习新风尚

近年来&#xff0c;随着信息技术的飞速发展&#xff0c;互联网的普及和应用成为了我们生活中不可或缺的一部分。而在大学学习领域&#xff0c;电大搜题微信公众号应运而生&#xff0c;为广大学子提供了便捷的学习资源和交流平台。在这个信息高速发展的时代&#xff0c;上海开放…

滚雪球学Java(19):Java中的内存机制

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

OpenCV实现图像去水印功能(inpaint)

水印定位 需要根据图像特征获取水印的位置。 如图所示&#xff0c;图像左下角、右下角有水印。第一步&#xff0c;我们首先得定位水印所在位置。 Mat gray;cvtColor(src, gray, COLOR_BGR2GRAY);//图像二值化&#xff0c;筛选出白色区域部分Mat thresh;threshold(gray, thres…

IEEE模板中没有.bib相关内容怎么添加?

为了加深个人对该问题的记忆&#xff0c;特在此进行记录。 下图是IEEE某期刊提供的期刊模板&#xff0c;该模板来自于IEEE-Template Selector 从图中并没有看到bib文件&#xff0c;而在main.tex中也并没有相关引导&#xff0c;只是提到&#xff1a; 那如何添加呢&#xff1f;…