如果希望按照非递减顺序访问二叉树所有节点,二叉树中至少包含一个节点

  如果希望按照非递减顺序访问二叉树所有节点,二叉树中至少包含一个节点

  055-79007、二叉树的下一个节点【C详解】_ blog _ Sword指的是重建二叉树的报价

  给定二叉树的一个节点,请找出中序遍历序列中的下一个节点。

  注意:

  如果给定节点是中间顺序遍历序列中的最后一个,则返回一个空节点;二叉树不能为空,给定节点不能为空;样品

  假设二叉树为:[2 [2,1,3,null,null,null,null]],给出值等于2的节点。

  应该返回返回值等于3的节点。

  说明:这个二叉树的结构如下。2的后继节点是3。

  2

  /\

  3个想法(模拟)

  这个主题是在二叉树中寻找一个给定节点的后继节点。

  刚才讨论的情况,如下图所示:

  如果当前节点有一个右子节点,则右子树中最左边的节点是当前节点的后继节点。比如F的后继者是H;

  如果当前节点没有右子,就需要一路向上搜索父域,找到第一个父是左子的节点,这个节点的父就是当前节点的后继。举个例子,如果当前节点是D,那么第一个满足是其父左子的节点是F,那么C的父就是D的后继,也就是F是D的后继。

  时间复杂性分析

  无论向上看还是向下看,遍历的节点总数都不大于树的高度。所以时间复杂度是,其中h是树的高度。

  代码/* *

  *二叉树节点的定义。

  *结构树节点{

  * int val

  * TreeNode * left

  * TreeNode * right

  * TreeNode * father

  * TreeNode(int x) : val(x),left(NULL),right(NULL),father(NULL) {}

  * };

  */

  类别解决方案{

  公共:

  TreeNode * in order successor(TreeNode * p){

  If (p- right) {//如果当前节点有右子树,则搜索右子树,直到找到右子树最左边的节点。

  p=p-右;

  而(p-left)p=p-left;

  返回p;

  }

  //如果P有父节点,P是P的父节点的右子,继续查找。

  而(p-父p==p-父-右)p=p-父;

  返回p-父亲;//最后一个拐点的父节点是后继节点。

  }

  };

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 二叉树深度遍历算法,多叉树的深度优先遍历
  • C++创建二叉树,C++实现二叉树
  • 二叉查找树镜像,镜像对称二叉树
  • 完全二叉树的先序遍历,请写出该二叉树的先序和层次遍历的序列
  • 二叉搜索树和二叉查找树,二叉树 二叉搜索树区别
  • 二叉树查找第k个最小元素,找出二叉搜索树第k小的节点
  • 如果f是由有序树t转换而来的二叉树,
  • 判断二叉树是否是平衡二叉树,b+树是不是平衡二叉树
  • 二叉链表实现完全二叉树,采用三叉链表存储二叉树
  • 二叉树的三种遍历方式是什么,二叉树的三种遍历方式是
  • java二叉树排序算法,二叉排序树的实现
  • java二叉树的遍历算法代码,编程实现二叉树的遍历算法
  • java二叉树删除,二叉树查找算法java
  • java二叉树查找,二叉搜索树的定义
  • 留言与评论(共有 条评论)
       
    验证码: