zoukankan      html  css  js  c++  java
  • 算法导论--第12章【二叉查找树】

    12.1-2
         BST:node.left.key < node.key < node.right.key
         堆:node.key < node.left.key;node.key<node.right.key
         不可以,堆排需要nlgn才可以
    12.1-3
         使用栈的方法:略
         不使用栈的方法:
              由于不能够使用栈,那么如果能够正确的遍历一颗树,那么最重要的就是能够回溯到后继节点,那么中序遍历的特点决定了需要找到每一个节点的前驱节点,这样才能够回溯到当前节点继续向后进行。
         思路:
              1)如果当前节点的左子树为空,则对当前节点进行输出,当前节点变为右子树
              2)如果当前节点的左字树非空,则找到当前节点的前驱,
                   2.1)如果前驱节点的右子树为空,则前驱节点的右子树赋值为当前节点,当前节点为当前节点的左孩子
                   2.2)如果前驱节点的右子树为当前节点,则说明当前节点是由当前节点的前驱指针更新过来的,也就是说该节点的左子树已经遍历完毕,输出当前节点,将前驱节点的右子树置空,并将当前节点更新为当前节点的右子树
    12.1-4 略

    12.2-3
         TREE_PREDECESSOR(x)
              if left(x) == NIL:
                   return x;
              else:
                   pre = left(x);
                   while (right(pre)!=NIL) {
                        pre = pre->right;
                   }
                   return pre;
     12.2-5

            如果curr节点有左子女,那么它的前驱一定是左子女中最右边的节点,否则就不是前驱节点

    个人博客:http://www.yancey.info/?p=125 

  • 相关阅读:
    self 和 super 关键字
    NSString类
    函数和对象方法的区别
    求两个数是否互质及最大公约数
    TJU Problem 1644 Reverse Text
    TJU Problem 2520 Quicksum
    TJU Problem 2101 Bullseye
    TJU Problem 2548 Celebrity jeopardy
    poj 2586 Y2K Accounting Bug
    poj 2109 Power of Cryptography
  • 原文地址:https://www.cnblogs.com/yancey/p/3403677.html
Copyright © 2011-2022 走看看