二叉搜索树与双向链表

题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

分析
首先注意要求的是一个排序的双向链表,从小到大,嗯,看到这里我就想到了二叉排序树的中序遍历,因为二叉排序树的中序遍历就是从小到大节点进行遍历的。
在这里插入图片描述

代码

//节点类
public class TreeNode {
	int val = 0;
	TreeNode left = null;
	TreeNode right = null;

	public TreeNode(int val) {
		this.val = val;

	}
}


//实现类
public class Solution {
	TreeNode head = null;
	TreeNode realHead = null;
    public TreeNode Convert(TreeNode pRootOfTree) {
    	ConvertSub(pRootOfTree);
    	return realHead;
    }
    
    public void ConvertSub(TreeNode pRootOfTree) {
    	if(pRootOfTree == null) {
    		return;
    	}
    	
    	ConvertSub(pRootOfTree.left);
    	if(head == null) {     //遍历到树的最左叶子节点,也就是双向链表的头结点
    		head = pRootOfTree;      //缓存当前节点
    		realHead = pRootOfTree;   //指向双向链表的头结点
    	}
    	else {
    		head.right = pRootOfTree;  //head为是当前节点在双向链表中的前一个节点
    		pRootOfTree.left = head;
    		head = pRootOfTree;
    	}
    	
    	ConvertSub(pRootOfTree.right);
    }
}
posted @ 2019-03-23 22:35  如是说  阅读(179)  评论(0编辑  收藏  举报