判断二叉搜素树
使用递归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;
}
}