剑指offer 二叉搜索树以及双向链表
来源:互联网 发布:js appendchild的用法 编辑:程序博客网 时间:2024/06/11 18:42
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
解答:
public class Solution { public TreeNode Convert(TreeNode pRootOfTree) { if(pRootOfTree==null)return null; if(pRootOfTree.left==null&&pRootOfTree.right==null){ return pRootOfTree; }else if(pRootOfTree.left==null&&pRootOfTree.right!=null){ pRootOfTree.right=Convert(pRootOfTree.right); pRootOfTree.right.left=pRootOfTree; return pRootOfTree; }else if(pRootOfTree.left!=null&&pRootOfTree.right==null){ TreeNode head=null; TreeNode tail= Convert(pRootOfTree.left); head=tail; while(tail.right!=null){ tail=tail.right; } pRootOfTree.left=tail; pRootOfTree.left.right=pRootOfTree; return head; }else{ TreeNode head=null; TreeNode tail= Convert(pRootOfTree.left); head=tail; while(tail.right!=null){ tail=tail.right; } pRootOfTree.left=tail; pRootOfTree.left.right=pRootOfTree; pRootOfTree.right=Convert(pRootOfTree.right); pRootOfTree.right.left=pRootOfTree; return head; } } }思路:
使用递归的解法:把函数理解为输入一个二叉树的根,返回一个双向链表的头结点,以左孩子构成的双向链表的尾节点作为根节点左侧相邻的节点,以右孩子构成的双向链表的头节点作为根节点右侧相邻的节点。递归拼接成一条双向链表,并返回双向链表的头结点。
重点:
重点是递归时注意左右子树为空时候的判断!
阅读全文
0 0
- 剑指offer 二叉搜索树以及双向链表
- 剑指Offer二叉搜索树与双向链表
- 【剑指offer】二叉搜索树转双向链表
- 【剑指offer:】Q27:二叉搜索树与双向链表
- 剑指offer--二叉搜索树与双向链表
- 剑指offer 27 - 二叉搜索树与双向链表
- 剑指offer-二叉搜索树与双向链表
- 《剑指offer》二叉搜索树与双向链表
- 【剑指Offer】二叉搜索树与双向链表
- 剑指offer - 二叉搜索树转双向链表
- 剑指offer—二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表
- 【剑指offer】之二叉搜索树转双向链表
- 剑指offer-二叉搜索树与双向链表
- 剑指Offer--027-二叉搜索树与双向链表
- 剑指offer:二叉搜索树与双向链表
- [剑指offer]二叉搜索树与双向链表
- 《剑指offer》-二叉搜索树与双向链表
- 给messageCheckBox 赋值
- 杨辉三角两种输出结果
- 数据结构 BFS层次遍历二叉树【C语言版本】
- 斯坦福大学机器学习课程线性回归编程作业二(多变量2)
- hibernate加载策略之lazy
- 剑指offer 二叉搜索树以及双向链表
- 1024. 科学计数法 (20)
- Java集合源码学习(四)HashMap分析
- 2016TID敏捷持续集成演讲材料——公开版
- C语言细节总结
- 冒泡排序(C实现)
- [leetcode]67. Add Binary@Java
- Linux配置虚礼机的网络和yum源
- Oracle 索引