二叉树遍历
中序递归遍历:左子树,根,右子树
private void inOrderTraverse(Node node) { if (node != null) { //遍历左子树 this.inOrderTraverse(node.leftChild); //输入根的值 System.out.print(node.value + " "); //遍历右子树 this.inOrderTraverse(node.rightChild); } }
树的高度
private int getHeight(Node node) { if (node == null) { return 0; } else { //获取左子树高度 int lh = this.getHeight(node.leftChild); //获取右子树高度 int rh = this.getHeight(node.rightChild); //返回 return lh > rh ? lh + 1 : rh + 1; } }
树的结点数量
private int size(Node node) { if (node == null) { return 0; } else { int lsize = this.size(node.leftChild); int rsize = this.size(node.rightChild); return lsize + rsize + 1; } }
树档次遍历:借助队列
public void levelOrderByStack() { if (root == null) return; Queue<Node> queue = new LinkedList<Node>(); queue.add(root); while (queue.size() != 0){ for (int i = 0; i < queue.size(); i++) { //取出以后队列中的结点 Node temp = queue.poll(); //打印一下结点的值 System.out.print(temp.value+"--"); //把该结点的左子树加到队列中 if (temp.leftChild != null) queue.add(temp.leftChild); //把右子树加到队列中 if (temp.rightChild != null) queue.add(temp.rightChild); } } }
中序遍历 非递归
public void inOrderByStack() { Deque<Node> stack = new LinkedList<>(); Node current = root; while (current != null || !stack.isEmpty()){ while (current != null){ stack.push(current); current = current.leftChild; } if(!stack.isEmpty()){ current = stack.pop(); System.out.println(current.value+" "); current = current.rightChild; } } }