牛客原题 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
2017-10-13 22:29
543 查看
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public TreeNode Convert(TreeNode root) { if(root==null){//假如根节点为空,返回空 return null; } if(root.left==null&&root.right==null){//假如只有一个根节点,则返回根节点 return root; } //1、将左子树构造成双链表,并返回该链表头结点left TreeNode left=Convert(root.left); //2、定位到左子树链表的最后一个节点(左子树最右边的节点) TreeNode p=left;//创建一个临时节点P,用来遍历找到左链表的最后一个节点(左子树最右边的节点),p初始化指向做左子树的根节点, while(p!=null&&p.right!=null){ p=p.right;//最终p为左子树最右边的节点 } //3、如果左子树链表不为空,将当前root追加到左子树链表后 if(left!=null){//左子树链表不为空 p.right=root;//左子树链表的最后一个节点p(左子树最右边节点)的右指针指向当前root节点 root.left=p;//当前root节点的左指针指向左子树链表的最后一个节点p(左子树最右边节点) } //4、将右子树构造成双链表,并返回该链表的头结点right TreeNode right=Convert(root.right); //5、如果右子树链表不为空,将右子树链表追加到当前root后 if(right!=null){//右子树链表不为空 right.left=root;//右子树链表的头结点right的左指针指向当前root root.right=right;//当前root的右指针指向右子树链表的头结点right } return left!=null?left:root;//根据左子树链表是否为空返回整个双向链表的头指针。 } }
相关文章推荐
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- java 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- (Java实现)输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 题目:将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
- 二叉搜索树变成有序双向链表,要求不能创建新的结点,只调整指针的指向
- 将一颗搜索树转换成一个排序的双向链表。要求不能创建任何新的节点
- 每天学习一算法系列(2)(把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.)
- 把二元查找树转变成排序的双向链表,要求输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表
- PHP 将二叉查找树转换为双向链表,要求不能创建新节点,只能调节节点指针
- 输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。
- 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.
- 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
- 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表
- 输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
- 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表
- 二叉搜索树转换成一个排序的双向链表
- 牛客网-二叉搜索树转换成一个排序的双向链表
- 二叉搜索树转换成一个排序的双向链表和实现一个线程安全且高效单例类——题集(二十一)