pascal算法问题
来源:百度知道 编辑:UC知道 时间:2024/05/17 19:27:11
最好是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。
满二