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

四川省建设厅网站首页淘宝网做宝贝详情用哪个网站

四川省建设厅网站首页,淘宝网做宝贝详情用哪个网站,asp.net网站开发菜鸟,wordpress附件插件下载题目链接:无题目链接,不知道为啥力扣上找不到这一题。 1. 题目介绍(08. 二叉树的下一个节点) 题目:给定一个二叉树和其中的一个节点,请找出中序遍历顺序的下一个节点并且返回。注意,树中的节点…

题目链接:无题目链接,不知道为啥力扣上找不到这一题。

1. 题目介绍(08. 二叉树的下一个节点)

题目:给定一个二叉树和其中的一个节点,请找出中序遍历顺序的下一个节点并且返回。注意,树中的节点除了有两个分别指向左、右子节点的指针,还要一个指向父节点的指针。

【测试用例】:
示例1:(一颗有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的指针用虚线表示)
在这里插入图片描述

中序遍历序列 {d,b,h,e,i,a,f,c,g}

  • a的下一节点为f
  • b的下一节点为h

2. 题解

2.1 讨论3种情况 – O(n)

package com.thomas.offer;public class Offer08_BinaryTreeNext {// 定义二叉树节点结构public static class TreeNode {private String val;private TreeNode left;private TreeNode right;private TreeNode parent;public TreeNode(String val) {this.val = val;}@Overridepublic String toString() {return val + "";}}/*3种情况:1. 当前节点有右子树,那么Next就是其右子树的最左子节点2. 当前节点无右子树,如果该节点是父节点的左子节点,那么Next就是其父节点3. 当前节点无右子树,如果该节点是父节点的右子节点,那么从其父节点开始向上查找,直到找到其父节点是左子节点的父节点,那么Next就是该父节点* */public static TreeNode nextNode(TreeNode node) {// 1. 判空操作if (node == null) return null;// 2. 第一种情况,节点有右子树,Next为其右子树的最左子节点if (node.right != null) {node = node.right;while (node.left != null) {node = node.left;}return node;}// 3. 第二种情况,节点无右子树,且该节点为其父节点的左子节点,Next为其父节点if (node == node.parent.left) return node.parent;// 4. 第三种情况:节点无右子树,且该节点为其父节点的右子节点,Next是一个父节点 (Xxx父节点是该父节点的左子节点)if (node == node.parent.right) {// 循环结束条件:node == node.parent.left,// 即找到了其父节点是左子节点的父节点node = node.parent;while (node != node.parent.left) {node = node.parent;// 注意:最右节点也属于该情况,但它无法满足循环结束条件,在这里我们判断一下,返回null即可if (node.parent == null) {return null;}}return node.parent;}return null;}// 建树public static void createTree(TreeNode node,TreeNode left,TreeNode right,TreeNode parent) {node.left = left;node.right = right;node.parent = parent;}public static void main(String[] args) {// 1。 创建二叉树节点对象TreeNode a = new TreeNode("a");TreeNode b = new TreeNode("b");TreeNode c = new TreeNode("c");TreeNode d = new TreeNode("d");TreeNode e = new TreeNode("e");TreeNode f = new TreeNode("f");TreeNode g = new TreeNode("g");TreeNode h = new TreeNode("h");TreeNode i = new TreeNode("i");// 二叉树中序遍历 {d,b,h,e,i,a,f,c,g}// 2. 构造二叉树createTree(a, b, c, null);createTree(b, d, e, a);createTree(c, f, g, a);createTree(d, null, null, b);createTree(e, h, i, b);createTree(f, null, null, c);createTree(g, null, null, c);createTree(h, null, null, e);createTree(i, null, null, e);// 3. 调用nextNode方法,打印结果System.out.println(nextNode(a));  // fSystem.out.println(nextNode(b));  // hSystem.out.println(nextNode(c));  // gSystem.out.println(nextNode(d));  // bSystem.out.println(nextNode(e));  // iSystem.out.println(nextNode(f));  // cSystem.out.println(nextNode(g));  // nullSystem.out.println(nextNode(h));  // eSystem.out.println(nextNode(i));  // a}}

在这里插入图片描述

3. 思考

找中序遍历二叉树的下一个节点,主要就分为三种情况:

  1. 当前节点有右子树,那么Next就是其右子树的最左子节点;
  2. 当前节点无右子树,如果该节点是父节点的左子节点,那么Next就是其父节点;
  3. 当前节点无右子树,如果该节点是父节点的右子节点,那么从其父节点开始向上查找,直到找到其父节点是左子节点的父节点,那么Next就是该父节点。

4. 可参考资料

[1] 大神整理的剑指Offer【所有面试题汇总】
[2] 【剑指Offer学习】【面试题58:二叉树的下一个结点】(代码结构参考)

http://www.bjxfkj.com.cn/article/107584.html

相关文章:

  • 青州市网站建设网站审核备案
  • 移动网站如何做权重重庆招标投标公共资源交易中心
  • 织梦网站主页底竞价托管外包代运营
  • 买国外域名 网站wordpress多条件搜索插件
  • 怎么做网站导航外链做企业网站用php
  • 做网站英文怎么写厦门seo顾问
  • 石家庄市做网站济宁seo
  • 设计网站网站名称宁波网站推广联系方式
  • 开个小网站要怎么做万州区最新消息
  • 网站开发费用计入什么二级科目江西赣鄂皖路桥投资有限公司网站建设
  • 网站推广页面设计wordpress ghostjs
  • 好学校平台网站模板小程序开发平台到底哪家好
  • 做绿色产品的网站做网站一般需要哪些文件夹?
  • 建设银行E路航如何自动进入网站php一键建站
  • 怎样免费做书画网站建立网站需要备案吗
  • 网站建设与管理实训课程wordpress与商城
  • 中山网站优化wordpress 关键词设置
  • 中山市住房建设局网站加强网站建设 通知
  • 网站页面设计最宽可做多宽网站优化搜索排名
  • 在线做ppt模板下载网站wordpress主题 html5模板
  • 做网站怎么租个域名产品开发计划书
  • 阳江网站建设会议网站建设方案模板
  • 网站备案后可以改名吗网站全背景做多大
  • 山东网站建设公司哪家专业企业文化标语经典
  • 上海网站制作优化网站推广服务好公司排名
  • 网站网站制作网旅游最新资讯 新闻
  • 如何登陆建设银行信用卡网站制作微信公众号
  • 罗平县建设局网站网站模板下载模板下载安装
  • 郑州高端网站制作团队网站优化与SEO区别
  • 深圳网站设计公司发展历程免费网页设计制作网站