二叉树的遍历和遍历查找

二叉树的前序、中序、后序遍历

class BinaryTree{
    private Node root;

    public void setRoot(Node root) {
        this.root = root;
    }

    //前序遍历
    public void preOrder(){
        if(this.root!=null)
            this.root.preOrder();
        else
            System.out.println("空二叉树");
    }

    //中序遍历
    public void infixOrder(){
        if(this.root!=null)
            this.root.infixOrder();
        else
            System.out.println("空二叉树");
    }

    //后序遍历
    public void postOrder(){
        if(this.root!=null)
            this.root.postOrder();
        else
            System.out.println("空二叉树");
    }
}
class Node{
    private int no;
    private String name;
    private Node left;
    private Node right;
   
    //前序遍历
    public void preOrder(){
        System.out.println(this);
        if(this.left!=null)
            this.left.preOrder();
        if(this.right!=null)
            this.right.preOrder();
    }

    //中序遍历
    public void infixOrder(){
        if(this.left!=null)
            this.left.infixOrder();
        System.out.println(this);
        if(this.right!=null)
            this.right.infixOrder();
    }

    //后序遍历
    public void postOrder(){
        if(this.left!=null)
            this.left.postOrder();
        if(this.right!=null)
            this.right.postOrder();
        System.out.println(this);
    }
}

前序、后序、中序查找的算法与上类似

删除节点

要求

  1. 如果删除的节点是叶子节点,则删除该节点
  2. 如果删除的节点是非叶子节点,则删除该子树.
class BinaryTree{
 //删除节点
    public void delNode(int no){
        if(root!=null){
            if(root.getNo()==no)
                root=null;
            else
                root.delNode(no);
        }
        else
            System.out.println("空树,不能删除");
    }
}
class Node{
//删除节点
    public void delNode(int no){
        if(this.left!=null&&this.left.no==no)
        {
            this.left=null;
            return;
        }
        if(this.right!=null&&this.right.no==no)
        {
            this.right=null;
            return;
        }
        if(this.left!=null)
            this.left.delNode(no);
        if(this.right!=null)
            this.right.delNode(no);
    }
}

你可能感兴趣的:(二叉树的遍历和遍历查找)