02 2019 档案
摘要:AVL树,即平衡二叉搜索树,并且其左右子树的高度相差小于等于1。 AVL树的实现,在于插入节点的同时,保持树的平衡性。共分为如下四种旋转: 1. 左单边右旋转 当在k1的左子树上插入节点以后,导致K2失去平衡后的旋转。 代码实现如下: 2. 右单边左旋转 当在K2点右子树上插入节点后,导致的旋转,如
阅读全文
摘要:从根结点开始,将所有最左结点全部压栈,每当一个结点出栈时,都先扫描该结点的右子树,只有当一个结点的左孩子和右孩子结点均被访问过了,才能访问结点自身。 非递归算法实现如下: 后序非递归算法的特性是:就是当访问某个结点时,栈中所保存的元素 正好是这个结点的所有祖先。那么知道了这个特性,我们就很容易解决下
阅读全文
摘要:二叉树中序遍历的非递归算法同样可以使用栈来实现,从根结点开始,将根结点的最左结点全部压栈,当结点p不再有最左结点时,说明结点p没有左孩子,将该结点 出栈,访问结点p,然后对其右孩子做同样的处理。 二叉树中序遍历非递归算法如下:
阅读全文
摘要:先序遍历二叉树的时候,首先访问根结点,再访问左孩子,最后访问右孩子。在二叉树先序遍历非递归算法中,先将根结点压栈,在栈不为空的时候执行循环: 让栈顶元素p出栈,访问栈顶元素p,如果p的右孩子不为空,则让其右孩子先进栈,如果p的左孩子不为空,则再让其左孩子进栈(注意:进栈顺序一定是先右 孩子,再左孩子
阅读全文