外贸有哪些网站陕西西安网站建设公司排名
news/
2025/9/23 5:12:44/
文章来源:
外贸有哪些网站,陕西西安网站建设公司排名,多功能wordpress图片主题,wordpress博客排行文章目录 1. 题目描述2.题目解析 题目来源#xff1a;
牛客网…二叉搜索树与双向链表 1. 题目描述
输入一棵二叉搜索树#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围#xff1a;输入二叉树的节点数 0≤n≤1000#xff0c;二叉树中每个节点的值… 文章目录 1. 题目描述2.题目解析 题目来源
牛客网…二叉搜索树与双向链表 1. 题目描述
输入一棵二叉搜索树将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围输入二叉树的节点数 0≤n≤1000二叉树中每个节点的值 0≤val≤1000 要求空间复杂度O(1)即在原树上操作时间复杂度 O(n) 注意: 1.要求不能创建任何新的结点只能调整树中结点指针的指向。当转化完成以后树中节点的左指针需要指向前驱树中节点的右指针需要指向后继 2.返回链表中的第一个节点的指针 3.函数返回的TreeNode有左右指针其实可以看成一个双向链表的数据结构 4.你不用输出双向链表程序会根据你的返回值自动打印输出 输入描述 二叉树的根节点 返回值描述 双向链表的其中一个头节点。 示例1 输入 {10,6,14,4,8,12,16} 返回值 From left to right are:4,6,8,10,12,14,16;From right to left are:16,14,12,10,8,6,4; 说明输入题面图中二叉树输出的时候将双向链表的头节点返回即可。 示例2 输入{5,4,#,3,#,2,#,1} 返回值From left to right are:1,2,3,4,5;From right to left are:5,4,3,2,1; 2.题目解析
将二叉搜索树BST转换为双向链表Doubly Linked List的思路如下
利用二叉搜索树的中序遍历特性中序遍历二叉搜索树可以得到一个有序的节点序列。在中序遍历的过程中逐步调整每个节点的左右指针使其构成一个双向链表。 核心
具体步骤如下
定义一个指针 prev用于记录当前节点的前一个节点。按照中序遍历的顺序依次处理左子树、当前节点、右子树。在处理当前节点时将当前节点的左指针指向 prev 节点如果 prev 存在并将 prev 的右指针指向当前节点。然后更新 prev 为当前节点。遍历结束后链表构建完成返回链表头节点指针。
对于当前结点root有root-left要指向前继prev中序遍历时对于当前结点root其左孩子已经遍历完成了此时root-left可以被修改。同时prev-right要指向当前结点当前结点是prev的后继此时对于prev结点它已经完全加入双向链表。 画个图理解一下 代码如下
void _Convert(TreeNode* root, TreeNode* prev)
{//空树直接返回无需转换if (root nullptr) return;//先将其左子树完成转换_Convert(root-left, prev);//左子树转换完以后将当前节点的左指针指向 prev 节点root-left prev;//如果 prev 存在将 prev 的右指针指向当前节点if (prev)prev-right root;//然后更新 prev 为当前节点prev root; //再去完成左子树的转换_Convert(root-right, prev);
}
TreeNode* Convert(TreeNode* root)
{TreeNode* prev nullptr;_Convert(root, prev);//找转换完以后的链表的头指针while (root root-left){root root-left;}return root;
}至此本片文章就结束了若本篇内容对您有所帮助请三连点赞关注收藏支持下。
创作不易白嫖不好各位的支持和认可就是我创作的最大动力我们下篇文章见
如果本篇博客有任何错误请批评指教不胜感激
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911442.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!