题目描述:
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
4
/ \
2 7
/ \ / \
1 3 6 9
镜像输出:
4
/ \
7 2
/ \ / \
9 6 3 1
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
限制:
0 <= 节点个数 <= 1000
解题方法一:层序遍历+队列。遍历每个节点,然后每个节点左子树和右子树交换就行了。queue首先把root放进去,取queue[4]的第一个节点4(shift方法),然后将其左右节点交换一下,然后把它的子节点存到queue[7,2](因为先交换节点,所以就先存的7),接下来又是重复前面的步骤:取queue[7,2]的第一个节点7,然后交换左右节点,把子节点存进queue[2,9,6],一直将节点全部遍历完。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var mirrorTree = function(root) {
let queue=[root];
if(root===null) {
return null;
}
while(queue.length) {
let node = queue.shift();
let left = node.left;
node.left = node.right;
node.right = left;
if(node.left!=null) {
queue.push(node.left);
}
if(node.right!=null) {
queue.push(node.right);
}
}
return root;
};
解题方法二:中序遍历。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var mirrorTree = function(root) {
if(root===null) {
return null;
}
mirrorTree(root.left)
let left = root.left;
root.left=root.right;
root.right= left;
mirrorTree(root.left) //因为节点已经交换了,所以之前的右节点变成左节点了
return root;
};

本文详细介绍了如何实现二叉树的镜像翻转,提供了两种解题方法:层序遍历和中序遍历。通过具体示例代码,解释了每种方法的思路和操作过程,帮助读者理解二叉树节点交换的逻辑。
&spm=1001.2101.3001.5002&articleId=115737010&d=1&t=3&u=6de845a8c6d44fcd8f0ad148977c219c)
524

被折叠的 条评论
为什么被折叠?



