树的定义java

树的定义java
在力扣刷题已经刷了一段时间了,小伙伴有没发现,我们每次码的代码是算法的核心代码,还不算是完整的代码,比如说新手小白开始刷的是树了,对于树的定义力扣的后台已经提供给我们了,让我们省事不少,但说好要深度挖掘的呢!所以今天我要撸起袖子,决定攻克树的定义,现在就开始码~

1.定义节点类
public class TreeNode {
int value; //节点的值
TreeNode node; //节点
TreeNode left = null; //左孩子
TreeNode right = null; //右孩子

public  int getValue() {
	return value;
}
public void setValue(int value) {
	this.value = value;
}
public TreeNode getNode() {
	return node;
}
public void setNode(TreeNode node) {
	this.node = node;
}
public TreeNode getLeft() {
	return left;
}
public void setLeft(TreeNode left) {
	this.left = left;
}
public TreeNode getRight() {
	return right;
}
public void setRight(TreeNode right) {
	this.right = right;
}
public TreeNode() {
	super();
	// TODO Auto-generated constructor stub
}
public TreeNode(int value) {
	super();
	this.value = value;
}
@Override
public String toString() {
	// TODO Auto-generated method stub
	return this.value + " ";
}

//创建树
	public  TreeNode createTree(int[] arr, List<TreeNode> list) {
		// TODO Auto-generated method stub
		//把数组里面的数变成节点的形式
		for(int i = 0;i < arr.length;i++) {
			TreeNode node = new TreeNode(arr[i]);
			list.add(node);
		}
		//把节点关联起来,给N/2-1个节点设置子节点
		for(int j = 0;j<list.size()/2-1;j++) {
		//根据刷力扣的经验,用list来存储二叉树的节点的顺序是,按层次存储的,一层一层从左至右,从上至下
			list.get(j).setLeft(list.get(j*2+1));
			list.get(j).setRight(list.get(2*j + 2));
		}
		//上面设置的左孩子和右孩子的索引边界为list.size()-3,list.size()-2,
		//对最后一个父节点进行处理,list.size()/2-1
		int index = list.size()/2-1;
		list.get(index).setLeft(list.get(index*2+1));
		//考虑是否有右孩子
		if(list.size()%2 == 1) {
			list.get(index).setRight(list.get(2*index + 2));
		}
		
		TreeNode root= list.get(0);
		
		return root;
	}
	
	//打印树,层次遍历
	public void printTree(TreeNode root) {
		// TODO Auto-generated method stub
		if(root == null) return ;
		Queue<TreeNode> queue = new LinkedList<TreeNode>();
		queue.offer(root);
		
		while(!queue.isEmpty()) {
			TreeNode node = queue.peek();
			queue.poll();
			//
			
			if(node != null) {
				System.out.print(node.getValue() + " ");
			}
			
			if(node.getLeft() != null) {
				queue.offer(node.getLeft());
			}
			if(node.getRight() != null) {
				queue.offer(node.getRight());
			}
		}	
	}

}

  1. 主程序
    public class Tree {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    //将数组元素变为TreeNode类型节点
    // 给N/2-1个节点设置子节点
    int[] arr = new int[] {1,3,2,4,7,9};
    List list = new ArrayList<>();
    TreeNode node = new TreeNode();

     TreeNode root = node.createTree(arr,list);
     //printTree(root);
     root.printTree(root);
    

    }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值