这个题目很简单,考察的就是二叉树的中序遍历。
只记得二叉树的很多题解是用递归,但却忘记了是怎么写,以及中序遍历的顺序。。。
写递归的时候,要思考的几个问题:
1. 什么时候跳出递归?
2. 跳出递归的时候返回什么?
在这个题目中,在节点为null时跳出递归,返回节点的值。
因此,解法如下:
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function(root) {
//先遍历左边,当左边为空的时候返回。
const res = [];
let inOrder = (root)=>{
if(root === null) return;
inOrder(root.left);
res.push(root.val);
inOrder(root.right);
}
inOrder(root);
return res;
};
解析完了题目,还得重新复习一下,二叉树的概念。
首先,为什么会有二叉树?二叉树是为了弥补链表和数组的缺陷而提出的。
在链表中,插入、删除速度很快,但查找速度较慢。
在数组中,查找速度很快,但插入删除速度很慢。
而二叉树就是一种在插入、删除、查找、遍历等操作时,相对快的容器。
二叉树有多种遍历方式,我没有找到二叉树有这么多遍历方式的原因。
猜测来看,应该是与设计目的有关。 不同的遍历方式应用于不同的问题场景。
遍历方式包括:先序遍历、中序遍历、后序遍历、深度优先、广度优先。
干巴巴的去解释遍历方式,对理解二叉树的效果微乎其微。
接下来我会有方向性的解一些二叉树相关的题目。从而提高对于二叉树的认识和理解。