把二元查找树转变成排序的双向链表

 题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
   
  10
  / /
 6 14
 / / / /
4 8 12 16
   
 转换成双向链表
4=6=8=10=12=14=16。


package com.itcast.demo.random;

import java.util.Arrays;
import java.util.Scanner;

public class TreeNodeDemo {
	 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 TreeNodeDemo() {  
	        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 );  
	            if(r.right !=null){
	            	System.out.print("=");
	            }
	            r = r.right;  
	        }  
	    }  
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("请随意输入一串数字:");
		Scanner sc = new Scanner(System.in);
		String[] num = null;
		num = sc.nextLine().split(" ");
		int[] number = new int[num.length];
		for (int i = 0; i < number.length; i++) {
			number[i] = Integer.valueOf(num[i]);
		}
		
		Arrays.sort(number);
		TreeNodeDemo tn = new TreeNodeDemo();
		  for (int i = 0; i < number.length; i++) {  
	            tn.buildTree(tn.root, number[i]);  
	        } 
		  tn.ConvertNode(tn.root);  
	      tn.print(tn.root);  
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DisFney

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值