目录
1,题目
2,代码
2.1递归思想-深度优先遍历
2.2迭代-广度优先遍历
3,学习与总结
1,题目
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
2,代码
2.1递归思想-深度优先遍历
我们从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。
/**
* 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 {TreeNode}
*/
// 迭代思想
var invertTree = function(root) {
if(root === null){
return root;
}
const left = invertTree(root.left);
const right = invertTree(root.right);
root.right = left;
root.left = right;
return root;
};
2.2迭代-广度优先遍历
/**
* 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 {TreeNode}
*/
// 迭代思想
var invertTree = function(root) {
if(root === null){
return root;
}
let queue = [];
queue.push(root);
while(queue.length > 0){
const node = queue.shift();
//节点中的左右孩子进行交换
const tempTree = node.left;
node.left = node.right;
node.right = tempTree;
// 当节点的左子树不为空 将该节点入队列
if(node.left != null){
queue.push(node.left);
}
if(node.right != null){
queue.push(node.right)
}
}
return root;
};
3,学习与总结
多练习 多做题!
勉励自己:贵在坚持!