1.题目描述
2.递归解法
/**
* 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) {
let number = [];
var recursionTree = function(root){
if(root){
recursionTree(root.left);
number.push(root.val);
recursionTree(root.right);
}
}
recursionTree(root);
return number;
};
3.递归解法 借助栈
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function(root) {
let number = [];
let stack = [];
//递归 深度优先遍历 + 栈 左子树的根元素入栈 栈最上面的元素出栈 指向出栈元素的右子树根节点
while(root||stack.length){
while(root){
stack.push(root);
root = root.left;
}
root = stack.pop();
number.push(root.val);
root = root.right;
}
return number;
};
ECMAScript为数组专门提供了
push()
和pop()
方法,以便实现类似栈的行为。push()
方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。而pop()
方法则从数组末尾移除最后一项,减少数组的length
值,然后返回移除的项。
两者的时间复杂的和空间复杂度都为O(n)