二叉搜索树的深度优先遍历
先序遍历
// 先序遍历二叉搜索树
public void preOrder() {
preOrder(root);
}
// 对以node为根的二叉搜索树进行前序遍历, 递归算法
private void preOrder(Node node) {
if (node != null) {
System.out.println(node.value);
preOrder(node.left);
preOrder(node.right);
}
}
中序遍历
// 中序遍历二叉搜索树
public void inOrder(){
inOrder(root);
}
// 对以 node 为根的二叉搜索树进行中序遍历,递归算法
private void inOrder(Node node){
if (node != null){
inOrder(node.left);
System.out.println(node.value);
inOrder(node.right);
}
}
后序遍历
// 后序遍历二叉搜索树
public void postOrder(){
postOrder(root);
}
// 对以 node 为根的二叉搜索树进行后序遍历,递归算法
private void postOrder(Node node){
if (node != null){
postOrder(node.left);
postOrder(node.right);
System.out.println(node.value);
}
}
二叉树的广度优先遍历
层序遍历
// 二叉搜索树的层序遍历(广度优先)
public void levelOrder(){
// 使用LinkedList来作为我们的队列
LinkedList<Node> q = new LinkedList<>();
q.add(root);
// 先将 根节点 放入 q 中,再移除 此节点,将此节点的 左子节点 和 右子节点 放入 q 中
// 直到 q 为空
while (!q.isEmpty()) {
Node node = q.remove();
System.out.println(node.key);
if (node.left != null) q.add(node.left);
if (node.right != null) q.add(node.right);
}
}
计算二叉树的深度
// 计算二叉树的深度
public int getDepth() {
return getDepth(root);
}
private int getDepth(Node node) {
if (node == null)
return 0;
int left = getDepth(node.left);
int right = getDepth(node.right);
return left > right ? left + 1 : right + 1;
}