【java】查找树按序转双向链表
2015-09-15 17:48
369 查看
1.把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16
解答:中序遍历,转为双向链表
测试:
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
转换成双向链表
4=6=8=10=12=14=16
解答:中序遍历,转为双向链表
public ListNode linkList(BSTreeNode root, ListNode head, ListNode pre){ if(root != null) { if (root.left != null) { head = linkList(root.left, head, pre); } pre = head; ListNode temp = new ListNode(root.val); head.next = temp; head = temp; head.pre = pre; if (root.right != null) { head = linkList(root.right, head, pre); } } return head;
测试:
public static class BSTreeNode{ int val = 0; BSTreeNode left; BSTreeNode right; public BSTreeNode(int value){ val = value; } } public static class ListNode{ int val; ListNode pre; ListNode next; public ListNode(int value){ val = value; } } public static void main(String[] agrs){ BSTreeNode root = new BSTreeNode(10); BSTreeNode left = new BSTreeNode(6); BSTreeNode right = new BSTreeNode(12); BSTreeNode left1 = new BSTreeNode(4); BSTreeNode right1 = new BSTreeNode(8); root.left = left; root.right = right; left.left = left1; left.right = right1; ListNode head = new ListNode(0); ListNode pre = new ListNode(0); algorithm al = new algorithm(); al.linkList(root, head, pre); while(head != null){ System.out.println(head.val); head = head.next; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- [C/C++]反转链表
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树