二叉树的遍历方法
1、递归
2、栈
94. 二叉树的中序遍历
(1)题目描述
94. 二叉树的中序遍历https://leetcode.cn/problems/binary-tree-inorder-traversal/description/
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3] 输出:[1,3,2]
示例 2:
输入:root = [] 输出:[]
示例 3:
输入:root = [1] 输出:[1]
提示:
- 树中节点数目在范围
[0, 100]
内 -100 <= Node.val <= 100
用自己的话理解题意:
给定二叉树,我们求出他的中序遍历结果。
思路与解答:
首先什么中序遍历?
首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回,否则:
(1)中序遍历左子树
(2)访问根结点
(3)中序遍历右子树
如上图所示二叉树,中序遍历结果:DBEAFC
了解中序遍历的方法之后。
我们尝试用代码去解决
我们发现:
这个问题其实每一次的处理步骤都是一样。
无非是数据规模的大小不一样罢了
那么这就和我们学过的递归方法很相似了
那我们就需要
先把每次针对于问题我们的解决步骤
针对于每次搜索的节点
先遍历他的左子树
记录该节点
在遍历其右子树
代码如下:
class Solution {
public:
void work(TreeNode* root,vector<int>&ans) {
if (!root) {
return;
}
work(root->left,ans);//先遍历左子树
ans.push_back(root->val);//记录
work(root->right,ans);//右子树
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
work(root,ans);
return ans;
}
};