剑指Offer--二叉搜索树与双向链表

题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
思路 根据二叉搜索树的特点,通过中序遍历得到的是有序的。
自己写的low代码

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
import java.util.ArrayList;
public class Solution {
    public TreeNode Convert(TreeNode pRootOfTree) {
     ArrayList<TreeNode> nodes =new ArrayList<TreeNode>();//保存所有的节点;
	        //由于是二叉搜索树,所以采用中序遍历;
		 midTraveral(pRootOfTree,nodes);
		
		 //重新构建双向链表;
		if(!nodes.isEmpty()) {
			 TreeNode p = nodes.get(0);//移动指针;
			
			 for(int i=1;i<nodes.size();i++) {
			
				 p.right = nodes.get(i);
				 nodes.get(i).left = p;
				
				 p=nodes.get(i);
				 
			 }
			 //头和尾;
			 nodes.get(nodes.size()-1).right = null;
			nodes.get(0).left = null;
			 return nodes.get(0);
			 
		}else {
			return null;
		}
		
		
	    }
	 
	 //中序遍历;
	 private void midTraveral(TreeNode root,ArrayList<TreeNode>list) {
		if(root==null) {
			return ;
		}
		midTraveral(root.left,list);
		list.add(root);
		midTraveral(root.right,list);
		
	 }
}
posted @ 2018-07-31 23:38  LynnMin  阅读(141)  评论(0编辑  收藏  举报