二叉搜索树与双向链表

来源:互联网 发布:如何提高雅思写作 知乎 编辑:程序博客网 时间:2024/06/07 09:02

题目描述

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

思路:

1、二叉搜索树转成双向链表时,从最左边开始,到父节点,再到右子树,符合中序遍历

2、转换成双向链表时,节点有左右两个节点引用,可将节点的右节点指向下一个节点,左节点指向上一个节点

3、当访问节点时,为了形成链表,确定指向,应访问当前节点时,保存上一个访问的节点

/**public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {        TreeNode previous = null;    public TreeNode Convert(TreeNode pRootOfTree) {        if(null == pRootOfTree)            return null;                convertTo(pRootOfTree);        return getLeftLastNode(pRootOfTree);    }        public TreeNode getLeftLastNode(TreeNode root){//获取最左节点        TreeNode leftLast = root;        while(leftLast.left!=null){            leftLast = leftLast.left;        }        return leftLast;    }        public void convertTo(TreeNode current){        if(current!=null){                            convertTo(current.left);                           if(previous != null){//previous的右节点为当前节点,当前节点的左节点为previous                    previous.right = current;                    current.left = previous;                }                                previous = current;//previous保存访问过的上一个节点                                convertTo(current.right);                    }    }}


0 0
原创粉丝点击