二叉链表实现完全二叉树,采用三叉链表存储二叉树

  二叉链表实现完全二叉树,采用三叉链表存储二叉树

  NC332二叉树扩展为单链表

  描述一棵有n个节点的二叉树。请将二叉树展开成一个链表。

  1.展开的链表也是一个TreeNode,右边的指针指向下一个节点,左边的节点为空。

  2.链表的顺序与给定二叉树的第一个遍历顺序相同。

  3.这个问题不需要返回链表或者树。请在原树上操作,系统最后会检查原树的情况,以确定你的代码是否正确。

  4.该问题有O(1)额外空间复杂度的解。你能意识到吗?传入的TreeNode不包括在空间复杂度的计算中。

  例如:

  最初的二叉树是

  膨胀后是

  数据范围:满足二叉树的节点数,满足二叉树的节点值。

  示例1输入:

  {1,2,3,4,8}副本

  返回值:

  {1,# 2,# 4,# 8,# 3 }副本

  2示例输入:

  {0}份副本

  返回值:

  {0}非递归实现的解决方案我们很容易想到用递归的方法先得到所有被遍历的节点,然后把这些节点串联起来。那么,在遍历的过程中,这些节点可以按照先遍历的顺序串联起来吗?答案是肯定的,我们可以使用顺序遍历的非递归实现。在栈的帮助下,先把后面的节点放入栈中,然后处理栈顶元素,这个元素的右节点和左节点按顺序放入栈中,直到栈空,退出循环。

  代码如下:

  #包含位/标准数据。h

  定义树结构

  {

  int val

  TreeNode * left

  TreeNode * right

  TreeNode() : val(0),left(nullptr),right(nullptr) {}

  TreeNode(int x) : val(x),left(nullptr),right(nullptr) {}

  TreeNode(int x,TreeNode *left,TreeNode *right) : val(x),left(左),right(右){}

  };

  类别解决方案

  {

  公共:

  void expandTree(TreeNode *root)

  {

  if (root==nullptr)

  {

  返回;

  }

  TreeNode * node=nullptr

  STD:stack TreeNode * s;

  s.push(根);

  而(!s.empty()

  {

  auto cur=s . top();

  s . pop();

  if (cur- right!=nullptr)

  {

  s.push(向右弯曲);

  }

  if (cur- left!=nullptr)

  {

  s.push(向左弯曲);

  }

  if (node==nullptr)

  {

  node=cur

  node-left=node-right=nullptr;

  }

  其他

  {

  node-left=nullptr;

  node-right=cur;

  node=节点右;

  }

  }

  }

  };

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

相关文章阅读

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