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

网站设计任务新浪sae可以做网站么

网站设计任务,新浪sae可以做网站么,商标注册查询官网入口官方,网站菜单栏代码【java数据结构】二叉树OJ题 一、检查两颗树是否相同二、另一颗树的子树三、翻转二叉树四、对称二叉树五、判断一颗二叉树是否是平衡二叉树六、给定一个二叉树, 找到该树中两个指定节点的最近公共祖先七、根据一棵树的前序遍历与中序遍历构造二叉树练习#xff1a;八、二叉树前… 【java数据结构】二叉树OJ题 一、检查两颗树是否相同二、另一颗树的子树三、翻转二叉树四、对称二叉树五、判断一颗二叉树是否是平衡二叉树六、给定一个二叉树, 找到该树中两个指定节点的最近公共祖先七、根据一棵树的前序遍历与中序遍历构造二叉树练习八、二叉树前序非递归遍历实现练习练习 博客最后附有整篇博客的全部代码 一、检查两颗树是否相同 给你两棵二叉树的根节点 p 和 q 编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同并且节点具有相同的值则认为它们是相同的。 检查两颗树是否相同 解题思路 1.先判断两棵树是否都为空都为空则两棵树是相等的反之一棵树为空另一棵树不为空则两棵树不是相同二叉树。 2.分别进行遍历两棵树的左右节点判断其节点的值是否相等。 public boolean isSameTree(TreeNode p, TreeNode q) {if(pnullqnull)return true;if(pnull||qnull)return false;if(p.val!q.val){return false;}return isSameTree(p.left,q.left)isSameTree(p.right,q.right);}二、另一颗树的子树 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在返回 true 否则返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。 另一颗树的子树 解题思路1 1.先判断SubRoot是否为空为空则一定是子树下来判断Root是否为空为空则返回false。 2.自己定义了一个方法isSameTreeNode p,TreeNode q来判断遍历的树的左右节点的值是否相同。 3. return isSubtree(root.left,subRoot)|| 4. isSubtree(root.right,subRoot)||isSame(root,subRoot);这段代码的意思先用isSubtree(TreeNode root, TreeNode subRoot)这个方法遍历Root树的左右节点然后每当遍历到一个节点的时候都将该节点作为Root节点的树和SubRoot树传入到isSameTreeNode p,TreeNode q这个方法中进行判断这两棵树是否相同但凡相同则返回true反之如果遍历完每个节点都和SubRoot树没有完全相同的树则SubRoot就不是Root树的子树。 public boolean isSubtree(TreeNode root, TreeNode subRoot) {if(subRootnull)return true;if(rootnull)return false;return isSubtree(root.left,subRoot)||isSubtree(root.right,subRoot)||isSame(root,subRoot);}public boolean isSame(TreeNode p,TreeNode q){if(pnullqnull)return true;if(pnull||qnull||p.val!q.val)return false;return isSame(p.left,q.left)isSame(p.right,q.right);}三、翻转二叉树 给你一棵二叉树的根节点 root 翻转这棵二叉树并返回其根节点。 翻转二叉树 解题思路 1.先判断Root树是否为空为空则返回null。 2.递归树的每一个节点的左右节点并用定义的TreeNode类型的left和right来进行接收每一个节点的左右节点。 3.最后将left和right互换。 public TreeNode invertTree(TreeNode root) {if(rootnull)return null;TreeNode leftinvertTree(root.left);TreeNode rightinvertTree(root.right);root.leftright;root.rightleft;return root;}四、对称二叉树 给你一个二叉树的根节点 root 检查它是否轴对称。 对称二叉树 解题思路 和判断两棵树是否相同的思路相等不同点是判断的是p的左节点和q的右节点、p的右节点和q的左节点是否相同。 public boolean isSymmetric(TreeNode root) {if(rootnull)return true;TreeNode proot.left;TreeNode qroot.right;return isSame(p,q);}public boolean isSame(TreeNode p,TreeNode q){if(pnullqnull)return true;if(pnull||qnull||p.val!q.val)return false;return isSame(p.left,q.right)isSame(p.right,q.left);}五、判断一颗二叉树是否是平衡二叉树 给定一个二叉树判断它是否是 平衡二叉树。 判断一颗二叉树是否是平衡二叉树 解题思路1 时间复杂度为ON^2 1.先判断树是否为空。 2.遍历每一个节点求每一个节点的左右高度判断该节点的左右高度差是否大于1。 public boolean isBalanced(TreeNode root) {if(rootnull)return true;int leftHightgetHeight(root.left);int rightHightgetHeight(root.right);return Math.abs(leftHight-rightHight)1 isBalanced(root.left) isBalanced(root.right);}int getHeight(TreeNode root) {if (root null) return 0;int leftH getHeight(root.left);int rightH getHeight(root.right);return leftH rightH ? leftH 1 : rightH 1;}解题思路2 时间复杂度ON。 自下而上计算每个节点的高度判断每个节点是否是平衡二叉树如果是返回该节点的高度反之返回-1。 public boolean isBalanced2(TreeNode root) {return getHeight2(root)0;}int getHeight2(TreeNode root) {if (root null) return 0;int leftH getHeight2(root.left);if(leftH0){return -1;}int rightH getHeight2(root.right);if(rightH0Math.abs(leftH - rightH) 1){return Math.max(leftH, rightH) 1;}return -1;}六、给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 解题思路1 1.先判断树是否为空为空则返回null。 2.开始遍历树的每一个节点找到p或q的节点然后返回。 3.如果都找到了则返回Root节点这里的Root节点肯定不是p或q的本身如果没找到q节点则公共祖先就是q节点反之。 此思路当找到一个节点时就不会继续遍历该节点的子节点。 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(rootnull)return null;if(rootp||rootq)return root;TreeNode lefttreelowestCommonAncestor(root.left,p,q);TreeNode righttreelowestCommonAncestor(root.right,p,q);if(lefttree!nullrighttree!null){return root;}else if(lefttree!null){return lefttree;}else{return righttree;}}解题思路2 1.定义两个栈s1s2。用来保存root节点到目标节点p、q的节点数。 2.判断两个栈的长度pop出栈中元素个数多的栈让两个栈中元素个数相同。 3.peek两个栈栈顶元素判断是否相同相同则就是公共祖先不同则pop出两栈顶元素。 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {StackTreeNode s1new Stack();StackTreeNode s2new Stack();getPath(root,p,s1);getPath(root,q,s2);if(s1.size()s2.size()){int lens1.size()-s2.size();while(len!0){s1.pop();len--;}}else{int lens2.size()-s1.size();while(len!0){s2.pop();len--;}}while(!s1.isEmpty()!s2.isEmpty()){if(s1.peek()s2.peek()){return s1.peek();}else{s1.pop();s2.pop();}}return null;}public boolean getPath(TreeNode root,TreeNode target,StackTreeNode stack){if(rootnull) return false;stack.push(root);if(roottarget) return true;if(getPath(root.left,target,stack)){return true;}if(getPath(root.right,target,stack)){return true;}stack.pop();return false;}七、根据一棵树的前序遍历与中序遍历构造二叉树 给定两个整数数组 preorder 和 inorder 其中 preorder 是二叉树的先序遍历 inorder 是同一棵树的中序遍历请构造二叉树并返回其根节点。 根据一棵树的前序遍历与中序遍历构造二叉树 解题思路 1.定义一个buildTreeChild(int[] preorder, int[] inorder,int inbegin,int inend)方法用来构建二叉树int[] preorder前序遍历。 int[] inorder中序遍历。int inbegin标记中序遍历数组的起始位置。int inend标记中序遍历数组的末尾。 2.定义一个私有方法findVal(int[] inorder,int inbegin,int inend,int val)用来在中序遍历中找到根节点的位置。此时返回的int值左边的值就是左子树右边的值就是右子树。 public int preIndex0;public TreeNode buildTree(int[] preorder, int[] inorder) {return buildTreeChild(preorder,inorder,0,inorder.length-1);}public TreeNode buildTreeChild(int[] preorder, int[] inorder,int inbegin,int inend) {//这种情况下 表明 当前root 没有子树了 if(inbegin inend) {return null;}TreeNode root new TreeNode(preorder[preIndex]);int rootIndex findVal(inorder,inbegin,inend,preorder[preIndex]);preIndex;root.left buildTreeChild(preorder,inorder,inbegin,rootIndex-1);root.right buildTreeChild(preorder,inorder,rootIndex1,inend);return root;}private int findVal(int[] inorder,int inbegin,int inend,int val) {for(int i inbegin ;i inend;i) {if(inorder[i] val) {return i;}}return -1;}练习 根据一棵树的中序遍历与后序遍历构造二叉树 八、二叉树前序非递归遍历实现 给你二叉树的根节点 root 返回它节点值的 前序 遍历。 二叉树前序非递归遍历实现 解题思路 1.先判断root树是否为空。 2.定义一个栈和noderootnode开始往左遍历遍历一个将node.val放入链表中然后将node放入栈中当nodenull时nodestack.pop()遍历node右边的。 public ListInteger preorderTraversal(TreeNode root) {ListInteger listnew ArrayList();if(rootnull)return list;StackTreeNode stacknew Stack();TreeNode noderoot;while(node!null||!stack.isEmpty()) {while (node ! null) {list.add(node.val);stack.push(node);node node.left;}node stack.pop();node node.right;}return list;}练习 二叉树的中序遍历非递归 练习 二叉树的后序遍历非递归 此篇博客的全部代码
http://www.hkea.cn/news/14353151/

相关文章:

  • php网站如何绑定一级域名到子目录郴州建设工程信息网站
  • 网站视频解析网站建设与网络编辑课程心得
  • 天津艺匠做网站怎么样惠州seo怎么做
  • 贵州交通建设集团有限公司网站网站设计尺寸规范
  • 小程序 微网站做怎样的网站能赚钱
  • 成都学校网站建设公司用html做网站源代码
  • 做众筹的网站唐山市做网站
  • 晋城市住房保障和城乡建设局网站网络机房建设方案
  • 在网站做电子画册网站怎么接广告赚钱
  • 企迪网沈阳seo优化
  • 网站admin密码忘记了怎么办两个wordpress联通
  • 黄岛开发区做网站的公司百度开发者中心
  • 电商网站有哪些官网网站有后台更新不了
  • 效益型网站建立简单网站
  • seo 网站 结构整站营销系统
  • 阜阳网站建设云平台做网站是怎样赚钱的
  • 怎么自己设计logoseo优化包括什么
  • 建设银行网站怎么看交易记录手机做任务网站
  • 在机关网站建设会上讲话英文版wordpress如何转换
  • 班级网站的建设调查表简单网站建设的费用
  • 网站建设中主页指的是建设网站基础
  • 公司网站的建设与运营管理制度企业网站收录
  • 大型网站建设方案常见问题wordpress插件改图标
  • iis 网站制作阳江打卡网红店
  • 做跨境都有哪些网站南宁手机做网站设计
  • 网站首页设计网站建设需要资质么
  • rss网站推广法韩国最新新闻消息
  • 收录好的网站恢复原来的百度
  • 企业网站 程序免费咨询制度
  • 网站如何集成微信支付中国建设银行人才招聘网站