标签:return 双向链表 创建 运行时 coder 输入 要求 real convert
/**
* 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
* 要求不能创建任何新的结点,只能调整树中结点指针的指向。
*/
package javabasic.nowcoder;
/*
* 采用中序遍历
修改中序遍历,在其中加入一个前驱结点
遍历左子树
当前结点指向左指针指向前驱结点
前驱结点右指针指向当前结点
前驱 = 当前
遍历右子树
*/
public class Main31 {
//双向链表的左边头结点和右边头结点
TreeNode head = null;
TreeNode realHead = null;
public TreeNode Convert(TreeNode pRootOfTree) {
ConvertSub(pRootOfTree);
return realHead;
}
private void ConvertSub(TreeNode pRootOfTree) {
//递归调用叶子节点的左右节点返回null
if(pRootOfTree==null)
return ;
//第一次运行时,它会使最左边叶子节点为链表第一个节点
ConvertSub(pRootOfTree.left);
if(head == null) {
head = pRootOfTree;
realHead = pRootOfTree;
}else {
//把根节点插入到双向链表的头结点,head向后移动
head.right = pRootOfTree;
pRootOfTree.left = head;
head = pRootOfTree;
}
//把右叶子节点也插入到双向链表
ConvertSub(pRootOfTree.right);
}
}
标签:return 双向链表 创建 运行时 coder 输入 要求 real convert
原文地址:https://www.cnblogs.com/zhaohuan1996/p/9055377.html