问题:
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
分析:二叉搜索树的中序遍历将得到升序结果。
(1)使用List结构记录中序遍历结果.
(2)将list中的元素构建为双向链表。
code:
public TreeNode Convert(TreeNode pRootOfTree) { //存储中序遍历结果 if(pRootOfTree == null) { return null; } ArrayList<TreeNode> list = new ArrayList<>(); midSearchTree(pRootOfTree,list); TreeNode head = list.get(0); TreeNode agent = head; for(int i=1;i<list.size();i++) { TreeNode newNode = list.get(i); agent.right = newNode; newNode.left = agent; agent = newNode; } return head; } //二叉树的中序遍历 public void midSearchTree(TreeNode root,ArrayList<TreeNode> list) { if(root!=null) { midSearchTree(root.left,list); list.add(root); midSearchTree(root.right,list); } } //树节点结构 public void insert(TreeNode root,int target) { if(target<root.val) { if(root.left!=null) { insert(root.left,target); }else { TreeNode node = new TreeNode(target); root.left = node; } }