二叉搜索树的深度优先遍历
先序遍历
public void preOrder () {
preOrder(root);
}
private void preOrder (Node node) {
if (node != null ) {
System.out .println(node.value );
preOrder(node.left);
preOrder(node.right);
}
}
中序遍历
public void inOrder (){
inOrder(root);
}
private void inOrder (Node node){
if (node != null ){
inOrder(node.left);
System.out .println(node.value );
inOrder(node.right);
}
}
后序遍历
public void postOrder (){
postOrder(root);
}
private void postOrder (Node node){
if (node != null ){
postOrder(node.left);
postOrder(node.right);
System.out .println(node.value );
}
}
二叉树的广度优先遍历
层序遍历
public void levelOrder (){
LinkedList<Node> q = new LinkedList<>();
q.add(root);
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 ;
}