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

有了代码如何建设网站企业年报查询网站

有了代码如何建设网站,企业年报查询网站,宁德城乡住房建设厅网站,网页紧急升级自动跳转通知专栏:数据结构(Java版) 个人主页:手握风云 目录 一、二叉树OJ练习题 1.1. 相同的树 1.2. 另一棵树的子树 1.3. 翻转二叉树 1.4. 平衡二叉树 1.5. 对称二叉树 一、二叉树OJ练习题 1.1. 相同的树 判断两棵树是否相同,我们是否只能遍历一…

专栏:数据结构(Java版)

个人主页:手握风云

目录

一、二叉树OJ练习题

1.1. 相同的树

1.2. 另一棵树的子树

1.3. 翻转二叉树

1.4. 平衡二叉树

1.5. 对称二叉树


一、二叉树OJ练习题

1.1. 相同的树

        判断两棵树是否相同,我们是否只能遍历一遍看结果?看下面的三棵二叉树,上面的树存储的值相同,结构也相同;中间的树存储的值相同,但结构不同;下面的树存储的值不相同。所以我们只遍历一遍看结果不可以。

       我们以相同的方式来遍历两棵二叉树。要判断两棵树结构相同,要么结点同时为空,要么同时不为空。当两个结点都不为空,再去判断结点所存储的值是否相同。先定义两个引用p、q,然后判断根结点是否相同。我们以下图为例,根结点相同、左子树相同且右子树也相同再去判断值相同。如果一个为空,另一个不为空,则结构不同;如果两个引用都不为空,但值不同,也返回false。

完整代码:

class TreeNode{int val;TreeNode left;TreeNode right;public TreeNode(){}public TreeNode(int val) {this.val = val;}public TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}/*** 时间复杂度O(min(m.n))* m为p这棵树的结点,n为q这棵树的结点* 结点小的最先遍历完*/
public class Solution {public boolean isSameTree(TreeNode p, TreeNode q){if((p != null && q == null) || (p == null && q!= null)){return false;}//上面的if语句不生效,代表要么都为空,要么都不为空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 class Test {public static void main(String[] args) {Solution solution = new Solution();TreeNode Tree1 = new TreeNode(1,new TreeNode(2),null);TreeNode Tree2 = new TreeNode(1,null,new TreeNode(2));System.out.println(solution.isSameTree(Tree1,Tree2));TreeNode Tree3 = new TreeNode(1,new TreeNode(2),new TreeNode(3));TreeNode Tree4 = new TreeNode(1,new TreeNode(2),new TreeNode(3));System.out.println(solution.isSameTree(Tree3,Tree4));TreeNode Tree5 = new TreeNode(1,new TreeNode(2),new TreeNode(1));TreeNode Tree6 = new TreeNode(1,new TreeNode(1),new TreeNode(2));System.out.println(solution.isSameTree(Tree5,Tree6));}
}

1.2. 另一棵树的子树

        一棵树的本身就是它的子树,所以我们要首先判断两棵树是否相同,再去判断subRoot是不是等于root的左子树还是右子树,判断我们可以依照上面讲过的是否是相同的树来判断。

完整代码:

class TreeNode{public int val;public TreeNode left;public TreeNode right;public TreeNode(){}public TreeNode(int val) {this.val = val;}public TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}public class Solution {public boolean isSubtree(TreeNode root, TreeNode subRoot){if(root == null) {return false;}if(isSameTree(root,subRoot)){return true;}if(isSubtree(root.left,subRoot)){return true;}if(isSubtree(root.right,subRoot)){return true;}return false;}public boolean isSameTree(TreeNode p, TreeNode q) {if((p != null && q == null) || (p == null && q!= null)){return false;}//上面的if语句不生效,代表要么都为空,要么都不为空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 class Test {public static void main(String[] args) {Solution solution = new Solution();TreeNode root = new TreeNode(3,new TreeNode(4),new TreeNode(5));root.left.left = new TreeNode(1);root.left.right = new TreeNode(2);TreeNode SubRoot = new TreeNode(4,new TreeNode(1),new TreeNode(2));System.out.println(solution.isSubtree(root, SubRoot));}
}

1.3. 翻转二叉树

        翻转就是把每一个结点的左右孩子都进行交换(如下图所示)。下图可能有一些抽象,我们可以从内存上对二叉树进行一个翻转。只要root不为空,就对左右结点进行交换。当root遍历完整棵二叉树,就可以进行翻转。

完整代码:

class TreeNode{public int val;public TreeNode left;public TreeNode right;public TreeNode(){}public TreeNode(int val) {this.val = val;}public TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}public class Solution {public TreeNode invertTree(TreeNode root){if(root == null){return null;}if(root.left == null && root.right == null){return root;}TreeNode tmp = root.left;root.left = root.right;root.right = tmp;invertTree(root.left);invertTree(root.right);return root;}public void PrevOrder(TreeNode root){if(root == null){return;}System.out.print(root.val+" ");PrevOrder(root.left);PrevOrder(root.right);}
}
public class Test {public static void main(String[] args) {Solution solution = new Solution();TreeNode root = new TreeNode(4,new TreeNode(2),new TreeNode(7));root.left.left = new TreeNode(1);root.left.right = new TreeNode(3);root.right.left = new TreeNode(6);root.right.right = new TreeNode(9);System.out.print("翻转之前:");solution.PrevOrder(root);System.out.println();solution.invertTree(root);System.out.print("翻转之后:");solution.PrevOrder(root);}
}

1.4. 平衡二叉树

        平衡二叉树是指该树所有节点的左右子树的高度相差不超过1。很明显这道题是涉及到求二叉树深度的问题。实现的逻辑也非常简单:求出每棵子树的高度,如果左子树的高度与右子树的高度之差小于等于1,则是平衡二叉树。我们可以调用之前求二叉树的最大深度的方法来求高度。但还存在一种反例(如下图所示)。下面这棵二叉树就不是平衡二叉树,因为9这个的结点的左右子树高度差为2。那么我们就不能只求一次高度,还需要重复计算高度,那么此时的时间复杂度也会随着增大,O(n^{2})

class TreeNode{public int val;public TreeNode left;public TreeNode right;public TreeNode(){}public TreeNode(int val) {this.val = val;}public TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}public class Solution {public boolean isBalanced(TreeNode root){if(root == null){return true;}int leftHeight = MaxDepth(root.left);int rightHeight = MaxDepth(root.right);return Math.abs(leftHeight - rightHeight) <= 1&& isBalanced(root.left)&& isBalanced(root.right);}public int MaxDepth(TreeNode root){if(root == null){return 0;}int leftH = MaxDepth(root.left);int rightH = MaxDepth(root.right);return Math.max(leftH,rightH)+1;}
}
public class Test {public static void main(String[] args) {Solution solution = new Solution();TreeNode root = new TreeNode(3,new TreeNode(9),new TreeNode(20));root.right.left = new TreeNode(15);root.right.right = new TreeNode(7);System.out.println(solution.isBalanced(root));}
}

1.5. 对称二叉树

      要判断二叉树是否是对称的,也就是判断左右子树是否是对称的(如下图所示)。root.left与root.right是否是对称的,再判断下面的子结点是否对称,也就是递归的条件。

class TreeNode{public int val;public TreeNode left;public TreeNode right;public TreeNode(){}public TreeNode(int val) {this.val = val;}public TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}public class Solution {public boolean isSymmetric(TreeNode root){if(root == null){return true;}return isSymmetricChild(root.left,root.right);}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 class Test {public static void main(String[] args) {Solution solution = new Solution();TreeNode root = new TreeNode(1,new TreeNode(2),new TreeNode(2));root.left.left = new TreeNode(3);root.left.right = new TreeNode(4);root.right.left = new TreeNode(4);root.right.right = new TreeNode(3);System.out.println(solution.isSymmetric(root));}
}


文章转载自:

http://n7h3KtHH.ptdzm.cn
http://Fx1PzeFm.ptdzm.cn
http://jeSR2ps8.ptdzm.cn
http://0sl60zZ4.ptdzm.cn
http://ELSyXN0w.ptdzm.cn
http://V019UZ66.ptdzm.cn
http://IgPC03Re.ptdzm.cn
http://oQQ70kVT.ptdzm.cn
http://jNo3sbP3.ptdzm.cn
http://64jfZqaE.ptdzm.cn
http://aeqEXMxI.ptdzm.cn
http://qxgA58nX.ptdzm.cn
http://S7fpEWj5.ptdzm.cn
http://vdqw6hLo.ptdzm.cn
http://Ot4n4FiY.ptdzm.cn
http://dScIGZXD.ptdzm.cn
http://caZjKZ1p.ptdzm.cn
http://MxOW5FHy.ptdzm.cn
http://uHSVm05E.ptdzm.cn
http://gWMG7gCW.ptdzm.cn
http://wrhUIgLV.ptdzm.cn
http://Q79i6YeO.ptdzm.cn
http://BcCihQeA.ptdzm.cn
http://C6C2VLyX.ptdzm.cn
http://50HZQAtA.ptdzm.cn
http://aB8qjWuz.ptdzm.cn
http://I81tvFtC.ptdzm.cn
http://oEwbMBqj.ptdzm.cn
http://dX7M05ZV.ptdzm.cn
http://bxk5fEyG.ptdzm.cn
http://www.dtcms.com/wzjs/717622.html

相关文章:

  • 买一个网站多少钱南京seo网站优化推广
  • 做牙厂的网站seo综合查询使用vsping工具
  • 大连网站前端制作公司钓鱼网站的危害
  • WordPress站点地图代码网站竞品拦截广告怎么做
  • 360建设网站免费下载网页设计属于什么行业类别
  • 厦门医院网站建设网站开发证有没有用
  • 衡水提供网站制作公司报价网站建设运营的灵魂是什么意思
  • 河北网站制作 网站开发wordpress页面文本编辑器
  • 做seo需要会网站开发吗怎么才能知道网站是谁做的
  • 网站管理后台源码如何自己开发一个平台
  • 搜索不到网站的关键词网站建设怎样
  • 伦教网站设计free免费空间
  • 诸暨网站建设书生商友c 网站开发需要学什么软件有哪些
  • wordpress建一个网站WordPress自动搜索文章插件
  • 平谷网站建设服务wordpress外贸产品插件
  • 做网站的目的与意义深汕特别合作区机关事业单位
  • 做英文的小说网站西安企业电话
  • 正规外贸网站建设公司佛山网站建设团队
  • 提供网站技术支持wordpress网页慢
  • 做网站需要什么专业做网站建设出路在哪里
  • 做体育设施工程公司的网站合肥万户网络
  • 电商网站建设求职定位wordpress dirname
  • 爱网站关键词挖掘工具网站备案是先做网站还是做完了备案
  • 内部网站建设依据文件做挂的网站
  • 自己做视频网站会不会追究版权虚拟搭建wordpress
  • 折扣网站模板刚刚上海突然宣布
  • 怎么建设淘宝网站东莞厚街核酸检测点
  • 大连做网站需要多少钱想建网站怎么做
  • 学校网站建设xml建设网站的策划书
  • 平邑的网站都是谁做的wordpress 图片无法上传