//前序遍历 const result =[],arr=[root] while(arr.length>0){ let tree = arr.pop() if(tree==null) continue result.push(tree.val) arr.push(tree.right) arr.push(tree.left) } return result //后序遍历 在前序遍历的情况下调换调换传入arr的两个子节点,同时将最后的数组反转。 const result =[],arr=[root] while(arr.length>0){ let tree = arr.pop() if(tree==null) continue result.push(tree.val) arr.push(tree.left) arr.push(tree.right) } return result.reverse() //中序遍历 const result =[],stack=[] let tree = root while(stack.length>0||tree){ if(tree){ stack.push(tree) tree = tree.left }else{ let rootTree = stack.pop() result.push(rootTree.val) tree = rootTree.right } } return result
//力扣上的层序遍历最后的输出结果似乎都是二维数组,需要将每一层的值用数组储存然后将其储存进一个数组输出出去。 const result = [],arr=[root] let res=[] while(arr.length>0){ let len = arr.length //相当于快照用于储存当前层数的长度。 while(len>0){ //当len为零时,说明当前层的值已全部弹出,这时应该用result储存当前层所有数组 let tree = arr.shift() len -- if(tree!=null){ res.push(tree.val) arr.push(tree.left) arr.push(tree.right) } } if(res.length==0) break result.push(res) res = [] //清空当前层用于记录下一层的值 } return result