写好递归函数,二叉树的简单问题就基本解决了,以下整理了二叉树的一些简单题目,难度递增。
数据结构:
function TreeNode(val) {
this.val = val;
this.left = this.right = null;
}
1.相同的树
题目描述:
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
代码:递归比较左右节点
var isSameTree = function(p, q) {
if(p===null&&q===null) return true
else if(p!=null&&q!==null&&p.val===q.val){
return isSameTree(p.left,q.left)&&isSameTree(p.right,q.right)
}
else{
return false
}
};
2.对称二叉树
题目描述:给定一个二叉树,检查它是否是镜像对称的。
代码:在第一题的基础上,这道题就不是什么大问题了,只要递归检查节点的左子树和右子数是否是一样的树就可以了,上一题是分别递归比较两棵树的左子树和右子树,这一题则需要比较同一棵树的左右子树
var isSymmetric = function(root){
const isSame=(p,q)=>{
if(p===null&&q===null) return true
else if(p!==null&&q!==null&&p.val===q.val){
return isSame(p.left,q.right)&&isSame(p.right,q.left)
}else{
return false
}
}
if(root===null) return true
return isSame(root.left,root.right)
};
3.二叉树的最大深度
题目描述:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
代码:也是递归,分别递增比较左右子树深度
var maxDepth = function(root) {
function findMax(root,deep){
return Math.max(findMax(root.left,deep+1),findMax(root.right,deep+1))
}
return findMax(root,0)
};
题目描述:
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
代码:
var sortedArrayToBST = function(nums,l=0,r=nums.length) {
if(l>=r){return null}
let mid=Math.floor((l+r)/2)
let tree=new TreeNode(nums[mid])
tree.left=sortedArrayToBST(nums,left,mid)
tree.right=sortedArrayToBST(nums,mid+1,right)
return tree
};