使用java实现一棵二叉树,并使用他完成二叉树的层次遍历,两种中序遍历(递归和非递归)
二叉树基本结构
public class BinaryTree { BinaryTree left; BinaryTree right; Integer val; public BinaryTree getLeft() { return left; } public void setLeft(BinaryTree left) { this.left = left; } public BinaryTree getRight() { return right; } public void setRight(BinaryTree right) { this.right = right; } public Integer getVal() { return val; } public void setVal(Integer val) { this.val = val; } }
二叉树层次遍历
首先将二叉树根节点放入到队列中,当队列不为空时,依次出队,并将出队的节点的左右孩子入队,再将该节点加入到结果集中
/** * 二叉树层次遍历 * @param root * @return */ public List<BinaryTree> levelOrder(BinaryTree root){ Queue<BinaryTree> queue = new LinkedList<>(); List<BinaryTree> list = new LinkedList<>(); queue.offer(root); while(!queue.isEmpty()){ BinaryTree head = queue.poll(); if(head.getLeft() != null){ queue.offer(head.getLeft()); } if(head.getRight() != null){ queue.offer(head.getRight()); } list.add(head); } return list; }
递归中序遍历
/** * 二叉树递归中序遍历 * @param root */ public void midOrderRecur(BinaryTree root){ if (root == null){ return; } midOrderRecur(root.left); System.out.print(root.getVal()); midOrderRecur(root.right); }
非递归中序遍历
/** * 二叉树中序遍历 * @param root */ public void midOrder(BinaryTree root){ BinaryTree current = root; LinkedList<BinaryTree> list = new LinkedList<>(); while(current != null || !list.isEmpty()){ while(current != null){ list.addFirst(current); current = current.left; } if(!list.isEmpty()){ current = list.removeFirst(); System.out.print(current.getVal()); current = current.right; } } }