java之二叉搜索树转换为双向链表
来源:互联网 发布:mysql 大数据查询 编辑:程序博客网 时间:2024/05/17 09:28
题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
分析:可以用中序遍历树中的每一个结点,当遍历根节点时,把树看成三部分:根结点,根结点的左子树,根结点的右子树。
先将根结点转换为双向链表,再将左子树和右子树转换为双向链表。
java代码:
package Tree;public class ConverToLinklist {private Node root;private class Node {private Node left;private Node right;private int data;public Node(int data) {this.left = null;this.right = null;this.data = data;}}public ConverToLinklist() {root = null;}public void buildTree(Node node, int data) {if (root == null) {root = new Node(data);} else {if (data < node.data) {if (node.left == null) {node.left = new Node(data);} else {buildTree(node.left, data);}} else {if (node.right == null) {node.right = new Node(data);} else {buildTree(node.right, data);}}}}/** * 将二叉树转换为双向链表 */private Node last = null;;public void ConvertNode(Node node) {if (node == null)return;if (node.left != null)ConvertNode(node.left);node.left = last;if (last != null)last.right = node;last = node;if (node.right != null)ConvertNode(node.right);}public void print(Node node) {Node r = node;while (r != null) {System.out.print(r.data + " ");r = r.right;}}public static void main(String[] args) {int[] a = { 2, 4, 12, 45, 21, 6, 111 };ConverToLinklist bTree = new ConverToLinklist();for (int i = 0; i < a.length; i++) {bTree.buildTree(bTree.root, a[i]);}bTree.ConvertNode(bTree.root);bTree.print(bTree.root);}}
0 0
- java之二叉搜索树转换为双向链表
- 二叉搜索树转换为双向链表
- diary5(二叉搜索树转换为双向链表)
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为双向链表
- 二叉搜索树转换为有序双向链表
- 将二叉搜索树转换为双向链表
- 二叉搜索树转换为双向链表
- 二叉搜索树转换为双向链表
- 搜索二叉树转换为双向链表
- 平衡二叉搜索树BST转换为双向链表
- 二叉搜索树转换为有序双向链表
- 二叉搜索树转换为双向链表
- 二叉搜索树转换为双向链表
- 将二叉搜索树转换为双向链表
- 如何搜索二叉树转换为双向链表
- IIS 重定向重定向出现eurl.axd
- C++ 整型提升的规则
- java_简单的售票系统
- SAP实施要重视用户体验
- Android 上打开word、excel、图片文件
- java之二叉搜索树转换为双向链表
- Eclipse设置、调优、使用
- 读书笔记-深入理解JVM虚拟机-1.JVM-Stack造成的OOM的理解
- 提问题进不去。想问大家一个关于返回值的问题(图的遍历),求给小白解答啊
- AudioQueue(AudioToolBox)的原理与使用
- 1.将一个有序数组反转
- jQuery学习笔记(二)—— 操作DOM元素
- GCD的基本使用
- 大海教你学手游2015CocosLua第一季_02场景跳转和用户触摸