数据结构和算法——树结构

二叉树

又叫二叉排序树。

节点是数量为,2^{n}-1,n为层数。

满二叉树:所有的叶子节点都在最后一层。

完全二叉树:如果所有叶子节点都在最后一层和倒数第二层,而且每个叶子节点都有左右子节点。

数据结构和算法——树结构_第1张图片 完全二叉树

前序遍历

1、先输出当前节点(初始是root节点)。

2、如果左子节点不为空,则递归继续前序遍历。

3、如果右子节点不为空,则递归继续前序遍历。

class HeroNode {
    private int no;
    private String name;
    private HeroNode left, right;
}
    public HeroNode preOrderSearch(int no) {
        if (this.no == no) {
            return this;
        }
        HeroNode resNode;
        if (this.left != null) {
            resNode = this.left.preOrderSearch(no);
            if (resNode != null) {
                return resNode;
            }
        }
        if (this.right != null) {
            resNode = this.right.preOrderSearch(no);
            if (resNode != null) {
                return resNode;
            }
        }
        return null;
    }

中序遍历

1、如果当前节点的左子节点不为空,则递归中序遍历。

2、输出当前节点。

3、如果当前节点的右子节点不为空,则递归中序遍历。

    public HeroNode infixOrderSearch(int no) {
        HeroNode resNode;
        if (this.left != null) {
            resNode = this.left.infixOrderSearch(no);
            if (resNode != null) {
                return resNode;
            }
        }
        if (this.no == no) {
            return this;
        }
        if (this.right != null) {
            resNode = this.right.infixOrderSearch(no);
            if (resNode != null) {
                return resNode;
            }
        }
        return null;
    }

后序遍历

1、如果当前节点的左子节点不为空,则递归后序遍历。

2、如果当前节点的右子节点不为空,则递归后序遍历。

3、输出当前节点。

    public HeroNode postOrderSearch(int no) {
        HeroNode resNode;
        if (this.left != null) {
            resNode = this.left.postOrderSearch(no);
            if (resNode != null) {
                return resNode;
            }
        }
        if (this.right != null) {
            resNode = this.right.postOrderSearch(no);
            if (resNode != null) {
                return resNode;
            }
        }
        if (this.no == no) {
            return this;
        }
        return null;
    }

二叉树节点的删除,如果是中间节点,则整个中间节点都删除。

    public void delNode(int no) {
        if (this.no == no) {
            return;
        }
        if (this.left != null) {
            if (this.left.no == no) {
                this.left = null;
            } else {
                this.left.delNode(no);
            }
        }
        if (this.right != null) {
            if (this.right.no == no) {
                this.right = null;
            } else {
                this.right.delNode(no);
            }
        }
    }

顺序存储二叉树

AVL树

又叫平衡二叉树。

B树

B+树

B*树

你可能感兴趣的:(数据结构和算法,数据结构,算法,java)