现在的位置: 首页 > 综合 > 正文

二叉搜索树变为排序双向链表

2013年05月27日 ⁄ 综合 ⁄ 共 1290字 ⁄ 字号 评论关闭

public class Test {
    
	public Node root;
	
	public void insert(int value){
		root = insert(root,value);
	}
	
	public Node insert(Node node,int value){
		if(node == null){
			node = new Node(value);
		}else if(node.value > value){
			node.left = insert(node.left,value);
		}else{
			node.right = insert(node.right,value);
		}
		return node;
	}
	
	public void print(Node node){
		if(node != null){
			print(node.left);
			System.out.println(node.value);
			print(node.right);
		}
	}
	
	public void turn(Node node){
		if(node != null){
			
			turn(node.left);
			turn(node.right);
			//左右2个排序链表  连接起来即可
			//注意叶子节点情况
			Node temp = node.left;
			while(temp != null){
				if(temp.right == null){
					break;
				}else{
					temp = temp.right;
				}
			}
			
			if (temp != null) {
				node.left = temp;
				temp.right = node;
			}
			
			temp = node.right;
			while(temp != null){
				if(temp.left == null){
					break;
				}else{
					temp = temp.left;
				}
			}
			
			if (temp != null) {
				node.right = temp;
				temp.left = node;
			}
		}
	}
	
	public static void main(String[] args){
		Test t = new Test();
		int[] a = {10,6,14,4,8,12,16};
		for(int i = 0; i < a.length; i++){
			t.insert(a[i]);
		}
		
		Node node = t.root;
		t.turn(node);
	
		System.out.println(t.root.value);
		System.out.println(t.root.left.value);
		System.out.println(t.root.left.left.value);
		System.out.println(t.root.left.left.left.value);
	}
	
}

树是:  10

          6        14

4           8   12       16 

程序输出为10 8 6 4

是否存在和为sum的路径?

public boolean hasPath(Node node,int sum){
		if(node == null){
			return false;
		}
		if(node.value == sum){
			return true;
		}
		return hasPath(node.left,sum - node.value) ||
			   hasPath(node.right,sum - node.value);
	}

抱歉!评论已关闭.