标记法实现二叉树的迭代遍历
核心思想如下
- 使用颜色标记节点的状态 新节点标记为白色 已访问的节点标记为灰色
- 如果遇到白色的节点 就把它置灰 然后将其右节点 自身 左节点依次入栈
- 如果遇到灰节点 直接输出
/*** 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) {var WHITE = 0, GRAY = 1var res = []var stack = [[WHITE,root]]while(stack.length > 0 ){const [color,node] = stack.pop()if(!node) continueif(color === WHITE){stack.push([WHITE,node.right])stack.push([GRAY,node])stack.push([WHITE,node.left])}else{res.push(node.val)}}return res};
