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

ext做的网站做网站 注意

ext做的网站,做网站 注意,wordpress页面定制,网站短期培训学校二叉树展开为链表 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…

二叉树展开为链表

给你二叉树的根结点 root ,请你将它展开为一个单链表:

  • 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。
  • 展开后的单链表应该与二叉树 先序遍历 顺序相同。

示例1:
在这里插入图片描述
输入:root = [1,2,5,3,4,null,6]
输出:[1,null,2,null,3,null,4,null,5,null,6]

解题思路

展开二叉树为单链表可以使用前序遍历的方式来实现。

  • 1、对于当前节点,首先将其左子树展开为单链表,并将左子树的最右节点连接到当前节点的右子树上。
  • 2、然后将当前节点的右子树展开为单链表。
  • 3、如果左子树不为空,将当前节点的右子树设为展开后的左子树;否则,将左子树设为右子树。

Java实现

public class FlattenBinaryTreeToLinkedList {static class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int val) {this.val = val;}}public void flatten(TreeNode root) {if (root == null) {return;}flattenHelper(root);}private TreeNode flattenHelper(TreeNode node) {if (node == null) {return null;}//    1//   / \//  2   5// / \   \//3   4   6// 把2的右子树4放到2的左子树3的右子树上//      1//     / \//    2   5//   / \   \//  3   4   6//   \//    4//把2左子树3-4移到右子树下,把2的左子树置空//      1//     / \//    2   5//     \   \//      3   6//       \//        4//递归,把1的右子树5-6移到1的左子树2-3-4的右子树下//      1//     / \//    2   5//     \   \//      3   6//       \//        4//         \//          5//           \//            6//把1的左子树2-3-4-5-6替换到右子树上,把1的左子树置空//      1//       \//        2//         \//          3//           \//            4//             \//              5//               \//                6//链表符合前序遍历了,并且左子树全为null//下面是具体代码实现TreeNode leftTail = flattenHelper(node.left);TreeNode rightTail = flattenHelper(node.right);if (leftTail != null) {// 把右子树放到左子树的右子树上leftTail.right = node.right;// 把(带有右子树的)左子树赋给右子树node.right = node.left;// 右子树清空node.left = null;}//        在这里,rightTail 的优先级最高,然后是 leftTail,最后是 node。
//        这确保了在递归的过程中,当前子树展开后的链表的尾节点是按照
//        右子树、左子树、当前节点的顺序确定的。
//        这样的顺序保证了链表的正确连接,即右子树的尾部接在左子树的尾部,
//        而左子树的尾部接在当前节点的右侧。这样展开后的链表顺序符合二叉树的先序遍历。return (rightTail != null) ? rightTail : (leftTail != null) ? leftTail : node;}// 示例测试public static void main(String[] args) {FlattenBinaryTreeToLinkedList solution = new FlattenBinaryTreeToLinkedList();// 构造示例二叉树TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(5);root.left.left = new TreeNode(3);root.left.right = new TreeNode(4);root.right.right = new TreeNode(6);// 调用展开方法solution.flatten(root);// 打印展开后的链表TreeNode current = root;while (current != null) {System.out.print(current.val + " ");current = current.right;}}
}

时间空间复杂度

  • 时间复杂度:O(n),其中n是二叉树中的节点数,每个节点都需要访问一次。
  • 空间复杂度:O(h),递归调用栈的深度为树的高度。
http://www.yayakq.cn/news/29288/

相关文章:

  • 那个网站可以接做网页私活wordpress 预缓存
  • 设计师服务平台网站辽宁专业网页设计免费建站
  • 淘宝客网站推广工具烟台网络科技有限公司
  • 备案期间关闭网站银川哪家网络公司做网站做得好
  • 广州古德室内设计有限公司logo连云港市网站优化
  • 微网站与微信的关系哪个网站做ic好
  • 成都做网站的wordpress首页文章设置
  • 做网站全屏尺寸是多少钱城乡建设和住房建设官网
  • 株洲网站建设企业搭建一个商城网站
  • 什么叫手机网站网站备案期间能使用吗
  • 上海公司法人变更南宁网站搜索引擎优化
  • 可以做网站二维码吗台州网站制作系统
  • 做公司年报网站登录密码是什么宁波seo排名外包公司
  • 那个网站做网编好网站建设与管理的考试
  • 淘宝网站怎么做特价wordpress推广链接
  • 知名营销网站开发下载安装百度地图导航
  • 阳江商城网站开发设计指数基金是什么意思
  • 旅游网站建设多少钱做高级电工题的网站
  • 网站开发与硬件合同做画册封面的网站
  • 快照打开是网站网站wordpress密码漏洞’
  • 北京做网络工程公司的网站东莞品牌营销型网站建设
  • 贵阳建站公司模板网站关键词推广企业
  • 网站优化费用一起做网店
  • 如何通过ftp上传网站爱佳倍 北京网站
  • 网站建设要花钱吗浙江省建设厅网站地址
  • 介绍一个做美食的网站wordpress是用什么数据库的
  • 网站建设服务那一个便宜学校网站建设 分工
  • wordpress网站程序员如何做企业黄页网站
  • 建设飞鹰摩托车官方网站小程序游戏代理加盟
  • 做网页引用别的网站的视频南通小企业网站建设