pascal算法问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 19:27:11
谁能讲一下BST算法,最好有例题
最好是pascal语言的

书上有啊!、

定义:

BST 待遍历的二叉树;

postorder 后序遍历规则;

first_node 按后序遍历规则遍历时将访问的第一个结点;

current_node 当前将要访问的结点;

next_node 根据postorder规则,在current_node之后即将访问的后继结点;

parent(node) 结点node的父结点;

lchild(node) 结点node的左孩子;

rchild(node) 结点node的右孩子。

算法步骤:

1 找到BST中以postorder方式遍历时将访问的第一个结点,即first_node;

2 令current_nodeçfirst_node;

3 查找current_node的后继结点next_node:

3.1 若current_node之父结点为空,算法结束;

3.2 若current_node为其父结点的左孩子,且其父结点无右子树,则next_nodeçparent(current_node);

3.3 若current_node为其父结点的左孩子,且其父结点有右子树,则令pçparent(current_node),于是next_node为结点p之右子树中以postorder方式遍历时将访问的第一个结点;

3.4 若current_node为其父结点之右子树,则next_nodeçparent(current_node);

4 访问current_node;

5 令current_nodeçnext_node,转到3。

满二