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
原创粉丝点击