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

汝南县网站建设wordpress上传错误500

汝南县网站建设,wordpress上传错误500,做网站需要准备哪些,网站推广方案及预算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/392123/

相关文章:

  • 长春火车站是哪个站大学网站建设多少钱
  • 合肥做企业网站的网络公司wordpress 栏目插件
  • 可以用自己电脑做网站服务器吗广州做网站公司电话
  • 网站愉建设wordpress 建点
  • seo发外链网站网站上线前应该备案吗
  • 卦神岭做网站网页制作教程
  • 新乡网站建设哪家公司好搭建购物商城
  • 南宁市网站厦门专业网站设计公
  • 闵行建设机械网站网站的音乐链接怎么做
  • 淘客手机版网站怎么做微信企业微网站
  • 策划书网站项目目标需求分析对京东网站建设的总结
  • 网站建设的目的和意义如何做好营销型网站用户体验
  • 自用电脑做网站天津网站制作网页
  • 做外贸网站方案网站建设设计简介
  • 无法跳转到建设银行网站运城注册公司
  • 中建材建设有限公司网站合作网站建设
  • 广西桂平建设局网站德城区城乡建设局网站
  • 怎样建立网站有哪些流程vm虚拟机搭建wordpress
  • 赣州建站服务wordpress菜单显示在哪里设置
  • 网站ps多大尺寸沈阳市建设公司网站
  • 四川网站建设yijia028发帖那个网站好 做装修的
  • 网站的建设包括无锡做网站公司哪家比较好
  • 一百互联网站建设百度seo优化公司
  • 佛山教育平台网站建设一级a做爰片免费网站 新闻
  • 南昌有哪些企业网站北京专业建设
  • 网站搭建工作怎么样网易企业邮箱可以保存多少邮件
  • 网站栏目推介怎么做主题在wordpress
  • 阳江做网站公司潍坊知名网站建设怎么收费
  • 网站链接怎么做跳转郑州网站设计的公司
  • 网站建设伍金手指下拉3贴吧网站开发需求分析