题目:
翻转一棵二叉树。
示例:
方法一:递归法
递归是最简单想到的,直接交换左右子树,然后依次递归到左右子树,继续上面的操作,直到左右子树都为空,就会返回翻转后的二叉树。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var invertTree = function(root) {
if(root){
var temp = root.left;
root.left = root.right;
root.right = temp;
invertTree(root.left);
invertTree(root.right);
}
return root;
};
方法二:迭代法
BFS,层级遍历方式。
使用一个队列将需要交换的子树放入,然后就循环,直到该队列为空。循环过程中,将左右子树进行交换,如果交换的左右子树存在,就放入队列中,继续循环。最后返回翻转后的二叉树。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {TreeNode}
*/
var invertTree = function(root) {
if(root){
const queue = [];
queue.push(root);
while(queue.length){
let cur = queue.shift();
let temp = cur.left;
cur.left = cur.right;
cur.right = temp;
if(cur.left){
queue.push(cur.left);
}
if(cur.right){
queue.push(cur.right);
}
}
}
return root;
};
本文为作者关于LeetCode的解法
大神解法请自行搜索
如果觉得有用麻烦点个赞