Skip to content
文档章节

BM33 二叉树的镜像

描述

操作给定的二叉树,将其变换为源二叉树的镜像。

数据范围:二叉树的节点数 0 \le n \le 10000≤n≤1000 , 二叉树每个节点的值 0\le val \le 10000≤val≤1000

要求: 空间复杂度 O(n) 。本题也有原地操作,即空间复杂度 O(1)的解法,时间复杂度 O(n)

比如:

源二叉树 bm33-1

镜像二叉树 bm33-2

题解

先序遍历树,交换每个节点的左右子树, 空间复杂度: O(1), 时间复杂度 O(n)

ts
/*class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pRoot TreeNode类 
 * @return TreeNode类
 */
export function Mirror(pRoot: TreeNode): TreeNode {
    // write code here
  var p = new TreeNode(-1, null, null);
  if(!pRoot) return pRoot;
  
  var stack: TreeNode[] = [pRoot];
  while(stack.length) {
    var node = stack.pop();
    
//     交换当前节点的左右子节点
    p.left = node.left;    
    node.left = node.right;
    node.right = p.left; 
    
    if(node.right) stack.push(node.right);
    if(node.left) stack.push(node.left);
  }
  return pRoot;
}