[题目链接](二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com))
因为是二叉搜索树,所以使用中序遍历就可以将二叉树转变为有序的。
同时,二叉树和链表相同,都是有3个节点:一个数值域,两个指针域
综上两条性质,可以在中序遍历的时候改变二叉树左右指向,使它变为双向链表
这个题真的是太妙了,就是从分利用了二叉搜索树和中序遍历
具体的解释在代码注释中:
public class Solution { public TreeNode prev=null; public void Inoreder(TreeNode root){ if(root==null) return; //中序遍历之左子树遍历 Inoreder(root.left); //中序遍历之 *** 作:改变节点的指向 //第一次root.left指向的prev是null,后来的prev //是保存的前一次的中序遍历的值,正好使整个链表有序 root.left=prev; //如果使非空的节点,因为使双向链表,所以prev和root要链接起来 if(prev!=null) prev.right=root; //保存当前的根节点,好返回给上一层 prev=root; Inoreder(root.right); } public TreeNode Convert(TreeNode pRootOfTree) { if(pRootOfTree==null) return null; Inoreder(pRootOfTree); //找到头节点,对于二叉搜索树来说, //一直找左节点直到左节点是空为止 TreeNode node=pRootOfTree; while(node.left!=null){ node=node.left; } return node; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)