判断二叉搜素树
使用递归dfs
class Solution {public boolean isValidBST(TreeNode root) {//深度搜索return dfs(root,Long.MIN_VALUE,Long.MAX_VALUE);}public boolean dfs(TreeNode treeNode,long minValue,long maxvalue){if(treeNode==null){return true;}if(treeNode.val<=minValue||treeNode.val>=maxvalue){return false;}return dfs(treeNode.left,minValue,treeNode.val)&&dfs(treeNode.right,treeNode.val,maxvalue);}}
用先序遍历
class Solution {public boolean isValidBST(TreeNode root) {//中序遍历List<Integer> res=midleView(root);for(int i=0;i<res.size()-1;i++){if(res.get(i)>=res.get(i+1)){return false;}}return true;}public List<Integer> midleView(TreeNode root){List<Integer> res=new ArrayList<>();if(root==null){return res;}res.addAll(midleView(root.left));res.add(root.val);res.addAll(midleView(root.right));return res;}}
对称二叉树
https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn7ihv/
dfs

class Solution {public boolean isSymmetric(TreeNode root) {if(root==null)return true;return dfs(root.right,root.left);}public boolean dfs(TreeNode left,TreeNode right){//退出条件if(left==right&&right==null){return true;}if(left==null||right==null||left.val==right.val){return false;}return dfs(left.left,right.right)&&dfs(left.right,right.left);}}
bfs
class Solution {
public boolean isSymmetric(TreeNode root) {
//层次遍历
List<TreeNode> list=new ArrayList<>();
list.add(root);
while (list.size()!=0)
{
for(int i=0;i<list.size()/2;i++)
{
if(list.get(i)==null^list.get(list.size()-1-i)==null)
{
return false;
}
if(list.get(i)==null&&list.get(list.size()-1-i)==null)
{
continue;
}
if(list.get(i).val!=list.get(list.size()-1-i).val)
{
return false;
}
}
List<TreeNode> temp=new ArrayList<>();
for(TreeNode treeNode:list)
{
if(treeNode==null)
{
continue;
}
temp.add(treeNode.left);
temp.add(treeNode.right);
}
list=temp;
}
return true;
}
}
将有序数组转换为二叉搜索树
https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xninbt/
题中说了要转换为一棵高度平衡的二叉搜索树,并且数组又是排过序的,这就好办了,我们可以使用递归的方式,每次取数组中间的值比如m作为当前节点,m前面的值作为他左子树的结点值,m后面的值作为他右子树的节点值,示例中一个可能的结果是
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return dfs(nums,0,nums.length-1);
}
public TreeNode dfs(int[] nums,int i,int j)
{
//退出条件
if(i>j)
return null;
TreeNode treeNode=new TreeNode();
int mid=(i+j)/2;
treeNode.val=nums[mid];
treeNode.left=dfs(nums,i,mid-1);
treeNode.right=dfs(nums,mid+1,j);
return treeNode;
}
}
