二叉树层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
输入:root = [3,9,20,null,null,15,7] ,输出:[[3],[9,20],[15,7]]
输入:root = [1] ,输出:[[1]]
输入:root = [], 输出:[]
引用队列来实现,队列先进先出,从左到右一层一层遍历,
/**
* 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 {number[][]}
*/
var levelOrder = function(root) {
if(root == null) {
return [];
}
let result = [];
let queue = [];
queue.push(root);
while(queue.length > 0){
let size = queue.length;
let arr = [];
while(size--){
let node = queue[0];
let value = queue.shift().val;
arr.push(value);
if(node.left != null){
queue.push(node.left);
}
if(node.right != null){
queue.push(node.right);
}
}
result.push(arr);
}
return result;
};
翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
var invertTree = function(root) {
if(root == null){
return root;
}
treeNode(root);
return root;
};
var treeNode = function(root){
if(root == null){
return
}
let temp = root.left;
root.left = root.right;
root.right = temp;
treeNode(root.left);
treeNode(root.right);
}
对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。
输入:root = [1,2,2,3,4,4,3] 输出:true
判断是否对称,比较左右子树外层结点是否相等,
使用递归法,
递归函数的参数和返回值,参数为(左子树的左节点,右子树的右节点),(左子树的右节点,右子树的左节点),返回值true /false;
递归终止条件,root 值为null,比较结果返回true or false;
确定单层递归的逻辑,if左子树右子树都为空返回true, 有一个为空,有一个不为空,直接判定为不对称返回false;都不为空value值不相等直接判定为不对称返回false;
都不为空且值相等,进入下一个递归,
左子树的左节点,右子树的右节点)与(左子树的右节点,右子树的左节点)相等都返回为true则该二叉树为对称二叉树;
/**
* 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 {boolean}
*/
var isSymmetric = function(root) {
return compareNode(root.left,root.right);
};
var compareNode = function(root1,root2){
if(root1 == null && root2 == null){
return true;
}
else if((root1 != null && root2 == null) || (root1 == null && root2 != null)){
return false
}
else if(root1.val != root2.val){
return false;
}
else if(root1.val === root2.val){
var compare1 = compareNode(root1.left,root2.right)
var compare2 = compareNode(root1.right,root2.left);
return compare1 && compare2;
}
}