树的定义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());
}
}
}
}
-
主程序
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);
}
}