力扣-226.翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例 1:

1 2
   | 输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
 
  | 
 
示例 2:

1 2
   | 输入:root = [2,1,3] 输出:[2,3,1]
 
  | 
 
示例 3:
提示:
- 树中节点数目范围在 
[0, 100] 内 
-100 <= Node.val <= 100 
解题思路
可以在遍历二叉树的过程中,对每个根节点,交换它的左右子树。但是需注意中序遍历无法实现,遍历过程中一直在处理左子树,右子树没有处理到。时间复杂度O(n),空间复杂度O(h)
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
   | //  1.递归法只能使用前序或后序,中序会导致一直处理左子树,右子树没处理到 var invertTree = function(root) {     if(root == null)     return null     // 保存右子树     const rightNode = root.right     // 将左子树移到右子树     root.right = invertTree(root.left)     // 将右子树移到左子树     root.left = invertTree(rightNode)     return root     }; // 2.迭代前序 var invertTree = function(root) {     const invertNode = function(root,left,right){         let tmp = left         left = right         right = tmp         root.left = left         root.right = right     }     // 前序遍历为根左右,则入栈顺序应为右左根,根节点会先出栈被处理     if(root == null)     return null     let stack = []     stack.push(root)     while(stack.length){         let node = stack.pop()         if(node !== null){             // 按右左根入栈             node.right && stack.push(node.right)             node.left && stack.push(node.left)             stack.push(node)             // 根节点入栈后push一个空节点做标记,出栈的时候空节点的下一节点即为根节点             stack.push(null)         }else{             // 处理根节点,交换根节点的左右子树             node = stack.pop()             invertNode(node,node.left,node.right)         }     }     return root } // 3.层序遍历 var invertTree = function(root) {     const invertNode = function(root,left,right){         let tmp = left         left = right         right = tmp         root.left = left         root.right = right     }     if(root == null)     return null     let queue = []     queue.push(root)     while(queue.length){         let levelLength = queue.length         while(levelLength--){             let node = queue.shift()             invertNode(node,node.left,node.right)             node.left && queue.push(node.left)             node.right && queue.push(node.right)         }     }     return root }
 
  |