算法系列——二叉搜索树和双向链表(剑指offer)
来源:互联网 发布:索尼手机更新软件 编辑:程序博客网 时间:2024/05/21 17:51
题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解题思路
由于二叉树的中序遍历具有可以实现递增的功能,同时二叉树的每一个节点都有两个指针,左指针和右指针,因此我们可以用这些特点将二叉树转换成一个双向链表,每次在递归遍历的时候设置一个pre,记录中序遍历时当前节点的前节点,然后将当前节点的左指针指向pre节点,然后如果pre节点不为空则将pre的右节点指向当前节点,由此就形成了一个双向链表的前后指针。每次递归重复这两步,则可以形成一个完整的双向链表。
最后一步就是双向链表已经构建完成了,而题目要求返回双向链表,则从原二叉树的root节点往前遍历找到双向链表的头返回即可.
注意:代码中设置了一个只有一个空间的数组来保存pre节点。
程序实现
public class Solution { public TreeNode Convert(TreeNode pRootOfTree) { if(pRootOfTree==null) return pRootOfTree; //结点前驱 TreeNode[] pre=new TreeNode[1]; helper(pRootOfTree,pre); TreeNode p=pRootOfTree; while(p.left!=null) p=p.left; return p; } private void helper(TreeNode node,TreeNode[] pre){ if(node.left!=null) helper(node.left,pre); node.left=pre[0]; if(pre[0]!=null) pre[0].right=node; pre[0]=node; if(node.right!=null) helper(node.right,pre); }}
阅读全文
0 0
- 算法系列——二叉搜索树和双向链表(剑指offer)
- 剑指offer—二叉搜索树与双向链表
- 牛客--剑指offer-二叉搜索树和双向链表
- 剑指Offer——(26)二叉搜索树与双向链表
- 剑指offer——二叉搜索树与双向链表(好题)
- 剑指offer(27)——二叉搜索树与双向链表
- 剑指offer系列源码-二叉搜索树与双向链表
- 剑指offer系列之二十五:二叉搜索树与双向链表
- 【剑指offer系列】 二叉搜索树与双向链表___27
- 剑指offer系列之25:二叉搜索树与双向链表
- 剑指Offer系列-面试题27:二叉搜索树与双向链表
- 【剑指offer-解题系列(26)】二叉搜索树与双向链
- 《剑指offer》——二叉搜索树与双向链表
- 剑指Offer:面试题27——二叉搜索树与双向链表(java实现)
- 剑指offer——二叉搜索树与双向链表
- 剑指offer——面试题27:二叉搜索树与双向链表
- 剑指Offer——二叉搜索树转换为双向链表
- 剑指offer——二叉搜索树与双向链表
- 2365 Rope
- Tomcat |Tomcat启动超时错误
- 创建scott的案例表代码
- acm学习
- mmm bionic avoid debug(fork)
- 算法系列——二叉搜索树和双向链表(剑指offer)
- 线段树——Luogu3870/BZOJ1230 [Usaco2008 Nov]lites 开关灯
- 微信小程序——获取用户unionId
- scala中循环不建议使用while和do...while,而建议使用递归
- Gitbook电子书同步至github
- VS2013+opencv3.3的安装(或自行编译源码)及配置
- hdu 6180 Schedule(贪心)
- kmalloc和vmalloc的区别和联系
- 2017/8/25