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

动态网站开发 用什么模板语言企业管理

动态网站开发 用什么模板语言,企业管理,在线涨粉平台,dw cs4怎么做网站二叉树的下一个结点——两种解法题目描述解题思路方法1:暴力解法方法2:最优解法题目描述 给你一颗二叉树的一个结点,返回中序遍历顺序中这个结点的下一结点。二叉树不仅有左右孩子指针,还有指向父亲结点的指针。 结点类型如下&am…

二叉树的下一个结点——两种解法

  • 题目描述
  • 解题思路
    • 方法1:暴力解法
    • 方法2:最优解法

题目描述

给你一颗二叉树的一个结点,返回中序遍历顺序中这个结点的下一结点。二叉树不仅有左右孩子指针,还有指向父亲结点的指针。
结点类型如下:

public class TreeLinkNode {public int val;public TreeLinkNode left = null;public TreeLinkNode right = null;public TreeLinkNode next = null;public TreeLinkNode(int val) {this.val = val;}
}

解题思路

首先问自己一个问题,如果这道题出现在笔试题中,自己会用什么方法做?如果出现在面试题中呢?同一道题为什么还分出现在笔试题中还是面试题中呢?很显然,笔试题中只要能过就好,设计的算法丑点,慢点也无所畏,不一定需要最优解法,当然前提是能够通过。而面试中就不一样了,显然面试官希望听到最优解法。

方法1:暴力解法

直接模拟题意。题意需要找到某个结点中序遍历的下一个结点,那很显然可以这样:

  1. 根据给出的结点求出整棵树的根节点
  2. 根据根节点递归求出树的中序遍历,存入ArrayList中
  3. 在ArrayList中查找当前结点,则当前结点的下一结点即为所求。

虽然有点暴力,但是时间复杂度也是线性的:
第一步:最坏为O(N),N为整棵树结点的个数
第二步:O(N)
第三步:最坏为O(N)
所以整的时间复杂度:3*O(N)

时间复杂度还可以接受,关键是思路好想并且每一步的代码都很简单。代码如下:

import java.util.ArrayList;
public class Solution {ArrayList<TreeLinkNode> list = new ArrayList<>();public TreeLinkNode GetNext(TreeLinkNode pNode) {TreeLinkNode parrent = pNode;while (parrent.next!=null){parrent = parrent.next;}InOrder(parrent);for (int i = 0; i < list.size(); i++) {if (pNode==list.get(i)){return i==list.size()-1?null:list.get(i+1);}}return null;}private void InOrder(TreeLinkNode parrent) {if (parrent!=null){InOrder(parrent.left);list.add(parrent);InOrder(parrent.right);}}
}

时间复杂度为O(N),空间复杂度为O(N)

方法2:最优解法

(1)分析
以如下二叉树为例,中序遍历为:{D,B,H,E,I,A,F,C,G}
二叉树的下一个结点
仔细观察,可以把中序下一结点归为几种类型:

  • 有右子树,下一结点是右子树中的最左结点,例如 B,下一结点是 H
  • 无右子树,且结点是该结点父结点的左子树,则下一结点是该结点的父结点,例如 H,下一结点是 E
  • 无右子树,且结点是该结点父结点的右子树,则一直沿着父结点追朔,直到找到某个结点是其父结点的左子树,如果存在这样的结点,那么这个结点的父结点就是我们要找的下一结点。例如 I,下一结点是 A;例如 G,并没有符合情况的结点,所以 G 没有下一结点

代码如下:

public class Solution {public TreeLinkNode GetNext(TreeLinkNode pNode) {// 情况1if (pNode.right != null) {TreeLinkNode pRight = pNode.right;while (pRight.left != null) {pRight = pRight.left;}return pRight;}// 情况2if (pNode.next != null && pNode.next.left == pNode) {return pNode.next;}// 情况3if (pNode.next != null) {TreeLinkNode pNext = pNode.next;while (pNext.next != null && pNext.next.right == pNext) {pNext = pNext.next;}return pNext.next;}return null;}
}

时间复杂度为O(N),空间复杂度为O(1)。

http://www.lbrq.cn/news/2746423.html

相关文章:

  • 沈阳专业网站制作设计淘宝的关键词排名怎么查
  • 做自己的博客网站网销怎么销售的
  • 外贸网站建设软件网络营销品牌公司
  • wordpress超链接出错谷歌seo最好的公司
  • 长沙网站建seo营销外包
  • 迪奥官网网站做的好吗在线一键免费生成网页网站
  • 网页制作技术基础教程seo推广哪家公司好
  • 网站的产品中心怎么做北京seo排名技术
  • 网站备案证书如何打开年轻人不要做网络销售
  • 做dnf辅助网站网站怎么添加外链
  • 农业网站建设方案 ppt模板下载产品关键词
  • 网站投放广告教程深圳全网营销平台排名
  • 域名138查询网seo优化师是什么
  • 网站服务器租用需要什么材料双11各大电商平台销售数据
  • 超级优化还原怎么快速优化网站
  • 他们怎么做的刷赞网站网络营销职业规划300字
  • 湖北阳新县建设局网站百度竞价推广代运营
  • 临夏金属装饰网站建设怎么申请建立网站
  • 网站 推送优化网站推广排名
  • 上海网站建设服务公司怎么申请一个网站
  • 金华做网站报价十大骗子教育培训机构
  • 广州商城建站北京网站优化实战
  • 注册号域名后 怎么建设网站好看的html网页
  • 我想做亚马逊网站怎么做网站软件下载
  • 泸州网站建设报价网址关键词查询网站
  • 做网站视频存储苏州seo门户网
  • 网站页面宽度seo优化与sem推广有什么关系
  • 网络公司 营销型网站广东短视频seo营销
  • php网站设计人员郑州网站开发顾问
  • 福州网站建设兼职网络营销案例视频
  • 数组实现各类数据结构
  • 评测系统构建
  • 零墨云A4mini打印机设置电脑通过局域网络进行打印
  • 【深度学习】基于ESRNet模型的图像超分辨率训练
  • 【FreeRTOS】队列集
  • pytorch例子计算两张图相似度