刷题--二叉搜索树与双向链表
Posted Apollo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题--二叉搜索树与双向链表相关的知识,希望对你有一定的参考价值。
【题目描述】
基础:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。
进阶:要求不能创建任何新的节点,只能调整书中节点指针的指向
【基础】
解1:先序遍历二叉树,将遍历结果存入一个队列,再建立双向链表。
1 /** 2 public class TreeNode { 3 int val = 0; 4 TreeNode left = null; 5 TreeNode right = null; 6 7 public TreeNode(int val) { 8 this.val = val; 9 10 } 11 12 } 13 */ 14 import java.util.*; 15 16 public class Solution { 17 public TreeNode Convert(TreeNode pRootOfTree) { 18 // 先序遍历O(N), O(N) 19 if(pRootOfTree == null) 20 return null; 21 LinkedList<TreeNode> que = new LinkedList<TreeNode>(); 22 inOrderToQueue(pRootOfTree, que); 23 TreeNode head = que.poll(); 24 TreeNode cur = head; 25 while(que.isEmpty() == false){ 26 cur.right = que.poll(); 27 cur.right.left = cur; 28 cur = cur.right; 29 } 30 return head; 31 } 32 33 public static void inOrderToQueue(TreeNode head, LinkedList<TreeNode> queue){ 34 if(head == null) 35 return ; 36 if(head.left != null) 37 inOrderToQueue(head.left, queue); 38 queue.offer(head); 39 if(head.right != null) 40 inOrderToQueue(head.right, queue); 41 } 42 }
【进阶】
以上是关于刷题--二叉搜索树与双向链表的主要内容,如果未能解决你的问题,请参考以下文章