给定一个二叉树,返回它的中序 遍历。
示例
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解一:递归
var inorderTraversal = function(root) {
if(root===null) return [];
let result = [];
let inorder = (node,arr) => {
if(node===null) return ;
let{left,right,val} = node;
left && inorder(left,arr);
result.push(val);
right && inorder(right,arr);
}
inorder(root,result);
return result;
};
题解二:用栈
中序遍历的顺序是按照左孩子-根-右孩子的顺序。
根先入栈,判断有无左孩子,若有,左孩子入栈,继续判断是否有左孩子,直到没有左孩子。然后开始依次判断出栈,并判断每个节点是否有右孩子,再进行依次进栈出栈。
var inorderTraversal = function(root) {
if(root===null) return [];
let result = [];
let stack = [];
let node = root;
while (node!==null||stack.length!==0){
if(node!==null){
stack.push(node);
node = node.left;
}else{
node = stack.pop();
result.push(node.val);
node = node.right;
}
}
return result;
};