当前位置: 首页 > news >正文

上海利恩建设集团有限公司网站保定网站建设方案外包

上海利恩建设集团有限公司网站,保定网站建设方案外包,动漫设计与制作培训学院,创建网站能赚钱吗Java二叉树面试题讲解🚗1.检查两颗树是否相同🚕2.另一颗树的子树🚙3.二叉树最大深度🚌4.判断一颗二叉树是否是平衡二叉树🚎5.对称二叉树🚓6.获取树中结点个数🚑7.判断一个树是不是完全二叉树&am…

Java二叉树面试题讲解

  • 🚗1.检查两颗树是否相同
  • 🚕2.另一颗树的子树
  • 🚙3.二叉树最大深度
  • 🚌4.判断一颗二叉树是否是平衡二叉树
  • 🚎5.对称二叉树
  • 🚓6.获取树中结点个数
  • 🚑7.判断一个树是不是完全二叉树:

大家好,我是晓星航。今天为大家带来的是 Java二叉树面试题讲解 的讲解!😀

🚗1.检查两颗树是否相同

检查两颗树是否相同。OJ链接

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q == null) {return true;}if (p == null && q != null || p != null && q == null) {return false;}if (p.val != q.val) {return false;}return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);}
}

思路:

1.先判断p和q是否都为空,返回true。

2.在判断p和q是否一个为空一个不为空,返回false。

3.然后再判断p的值和q的值相不相等,相等返回true,不相等返回false。

4.最后返回p和q的左节点以及右节点是否都满足位置一致且数值相同,即直接递归判断(让之后的结点重新进入我们的函数)。

🚕2.另一颗树的子树

另一颗树的子树OJ链接

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if (p == null && q != null || p != null && q == null) {return false;}if (p == null && q == null) {return true;}if (p.val != q.val) {return false;}return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);}public boolean isSubtree(TreeNode root, TreeNode subRoot) {if (root == null || subRoot == null) {return false;}//根节点和subRoot是不是两颗相同的树if (isSameTree(root,subRoot)) {return true;}//subRoot是不是root的左子树if (isSubtree(root.left,subRoot)) {return true;}//subRoot是不是root的右子树if (isSubtree(root.right,subRoot)) {return true;}return false;}
}

思路:

1、先判断两棵树是不是两颗相同的子树

2、如果不是,那么分别判断subRoot是不是root的左子树或者右子树

🚙3.二叉树最大深度

二叉树最大深度OJ链接

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int maxDepth(TreeNode root) {if (root == null) {return 0;}int leftHeight = maxDepth(root.left);int rightHeight = maxDepth(root.right);return leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1;}   
}

思路:通过创建左树高度leftHeight与右树高度rightHeight来进行比较,并返回较大值加1给上一层函数作为结果,在最下层元素的左右结点都为null直接返回,并多次递归后,直到返回到开始的root结点的值即为我们此树的高度。

🚌4.判断一颗二叉树是否是平衡二叉树

判断一颗二叉树是否是平衡二叉树OJ链接

1、root左树的高度-右树的高度<=1
2、root的左树是平衡点,右树是平衡的

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public int height(TreeNode root) {if(root == null) {return 0;}int leftHeight = height(root.left);int rightHeight = height(root.right);//return (leftHeight > rightHeight) ? leftHeight + 1 : rightHeight + 1;if (leftHeight >= 0 && rightHeight >= 0 && Math.abs(leftHeight - rightHeight) <= 1) {return Math.max(leftHeight,rightHeight) + 1;} else {//说明不平衡return -1;}}/***时间复杂度:O(N)*/public boolean isBalanced(TreeNode root) {if (root == null) {return true;}//int left = height(root.left);//int right = height(root.right);//return Math.abs(left - right) <= 1 && isBalanced(root.left) && isBalanced(root.right);return height(root) >= 0;}
}

思路:通过平衡二叉树的性质:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1来确定我们函数的返回值从而递归。注释代码是分开实现的方法,没有注释的代码是在判断高度的时候就判断该二叉树是不是平衡二叉树如果不是则返回-1,然后加入逻辑只要leftHeightrightHeight不>=0则返回-1,提高平衡树判断效率。

注:Math.abs()是调用的Math函数中的绝对值函数,目的是返回一个正的差值。

🚎5.对称二叉树

对称二叉树OJ链接

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree) {if (leftTree == null && rightTree != null ||leftTree != null && rightTree == null) {return false;}if (leftTree == null && rightTree == null) {return true;}if (leftTree.val != rightTree.val) {return false;}return isSymmetricChild(leftTree.left,rightTree.right) && isSymmetricChild(leftTree.right,rightTree.left);}public boolean isSymmetric(TreeNode root) {if (root == null) {return true;}return isSymmetricChild(root.left,root.right);}
}

思路:二叉树的对称可以理解为镜像对称,即左节点的左和右节点的右 左节点的右和右节点的左是否对称,

他和判断两个二叉树是否相同很类似,然后返回值返回左节点的左和右节点的右 左节点的右和右节点的左递归即可。

🚓6.获取树中结点个数

法一:

int count = 0;
int size1(BTNode root) {if (root == null) {return 0;}count++;size1(root.left);size1(root.right);return count;
}

运用子问题思路来调用递归返回树的总结点个数。

法二:

int count = 0;
int size2(BTNode root) {if (root == null) {return 0;}return size2(root.left) + size2(root.right) + 1;
}

思路:法二的思路和上图一样,例如在 二编号 返回值时,它的值为 编号三 返回的值1加上本身的1,所以 编号二 的值就返回2,同理编号四返回值为3,编号一返回值2+3+1=6。

🚑7.判断一个树是不是完全二叉树:

boolean isCompleteTree(BTNode root) {if (root == null) {return true;}Queue<BTNode> queue = new LinkedList<>();queue.offer(root);while (!queue.isEmpty()) {BTNode cur = queue.poll();if (cur != null) {queue.offer(cur.left);queue.offer(cur.right);} else {break;}}while (!queue.isEmpty()) {BTNode top = queue.peek();if (top != null) {return false;}queue.poll();}return true;
}

由上图关系得我们的二叉树不是完全二叉树

如下图如果我们将E的右节点去掉 则我们的二叉树变为了完全二叉树

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

http://www.yayakq.cn/news/338477/

相关文章:

  • 怎么做网站文字图片开州网站建设
  • 长沙河西做网站网站怎么做 凡科
  • 做网站的作用网站编辑工具软件
  • 做网站都需要什么步骤芙蓉区网站建设
  • 个人备案能建立企业网站吗松江手机网站建设
  • 网站制作镇江the7 wordpress 主题
  • 怎么建淘宝客网站wordpress手动安装
  • 免费的行情软件网站下载不用下载做网站水印
  • 企业网站 阿里云游戏开发引擎
  • 网站的建设费 账务处理二级分销模式图解
  • flash网站的优点和缺点手机房产网站模板
  • 宜昌百度网站建设监控设备网站制作
  • 里水哪里做有做网站食品网站开发毕业设计
  • 甘肃省住房建设厅户网站做网址导航网站收益
  • 企业网站实名认证怎么做网站更换图片之类的怎么做
  • 学校诗歌网站建设十个有创意的活动策划
  • 炒域名 网站网站开发长沙
  • 网站的备案信息wordpress多级菜单插件
  • 网站建设自查怎么做网页二维码链接
  • 苏州网站排名方案磨床 东莞网站建设
  • 苏州高端网站建设机构印刷外贸好做吗
  • 搞一个网站需要多少钱酷虎云建站
  • 东阿县建设招标网站小型网站开发要多少钱
  • 兰州网站推广建设公司比价网
  • .mil 域名网站有哪些网站底部导航设置
  • 大丰网站设计公司可以下载app的软件
  • 中国都有哪些网站网站指数查询
  • cms企业网站模板最好的县级代理商品
  • 做网站ui主要研究内容WordPress如何建小语种网站
  • 上海企业建设网站在家建设一个网站需要什么材料