判断二元数列是否是后序遍历查找树
2010-12-16 18:09
573 查看
node结构:
1.在数列中的序号
2.value
3.指示node为其parent node的left subtree node还是right subtree node的标记
4.左指针
5.右指针
函数: bool CreateTree(Node * node)
返回值:true:创建查找树成功,即数列是后序遍历查找树; false:除此以外
main执行步骤:
result = CreateTree(first node); /* first node: the first item of the array */
if (result)
{
print("OK.");
}
else
{
print("Not a Tree");
}
CreateTree执行步骤:
1.设置传入参数 node 为current node
2.取当前node 的 next node
3.若 next node == null, return true; 此次递归结束; 否则,继续
4.若 next node.value < current node.value
next node 成为 current node 的 parent node, current node 成为 next node 的right
subtree root node
验证当前tree是否合理(是否符合后序遍历二元查找树要求)
不合理,return false;
合理, result = CreateTree(next node);
若next node.value > current node.value
1) next node 成为 current node 的 parent node, current node 成为 next node 的left
subtree root node
验证当前tree是否合理(是否符合后序遍历二元查找树要求)
合理,result = CreateTree(next node);
不合理,进入2)
2) next node 成为 current node 的right sibling node(不需要验证是否合理,因为肯定合理
)
result = CreateTree(next node);
5.
if (!result)
{
return false;
}
else
{
if (next node 为 current node 的 parent node)
{
return true;
}
else
{
从最后一个node(必为整个tree 的 root) 向前遍历,直到current node 为止,执行如下步骤:
将选择的selected node作为current node的parent node
(根据两者相对决定是current node属于left subtree 还是right subtree),察看是否合理
合理,则return true;
不合理,解除selected node与current node的父子关系,尝试下一selected node
}
}
1.在数列中的序号
2.value
3.指示node为其parent node的left subtree node还是right subtree node的标记
4.左指针
5.右指针
函数: bool CreateTree(Node * node)
返回值:true:创建查找树成功,即数列是后序遍历查找树; false:除此以外
main执行步骤:
result = CreateTree(first node); /* first node: the first item of the array */
if (result)
{
print("OK.");
}
else
{
print("Not a Tree");
}
CreateTree执行步骤:
1.设置传入参数 node 为current node
2.取当前node 的 next node
3.若 next node == null, return true; 此次递归结束; 否则,继续
4.若 next node.value < current node.value
next node 成为 current node 的 parent node, current node 成为 next node 的right
subtree root node
验证当前tree是否合理(是否符合后序遍历二元查找树要求)
不合理,return false;
合理, result = CreateTree(next node);
若next node.value > current node.value
1) next node 成为 current node 的 parent node, current node 成为 next node 的left
subtree root node
验证当前tree是否合理(是否符合后序遍历二元查找树要求)
合理,result = CreateTree(next node);
不合理,进入2)
2) next node 成为 current node 的right sibling node(不需要验证是否合理,因为肯定合理
)
result = CreateTree(next node);
5.
if (!result)
{
return false;
}
else
{
if (next node 为 current node 的 parent node)
{
return true;
}
else
{
从最后一个node(必为整个tree 的 root) 向前遍历,直到current node 为止,执行如下步骤:
将选择的selected node作为current node的parent node
(根据两者相对决定是current node属于left subtree 还是right subtree),察看是否合理
合理,则return true;
不合理,解除selected node与current node的父子关系,尝试下一selected node
}
}
相关文章推荐
- 判断一个数列是否是二叉树后序遍历的结果
- 输入一个数列,判断是否为某一个二叉搜索树的后序遍历序列
- 判断二叉树的后序遍历序列是否合法
- 二叉搜索树的后序遍历序列序列判断是否是二叉搜索树
- 二叉树的链式存储结构 前序 后序 中序 层序遍历操作实现 判断是否完全二叉树
- 剑指offer解题报告(Java版)——判断一个数组是否是二叉搜索树的后序遍历序列 24
- 判断二叉排序树的后序遍历是否合法
- 单链表的创建和遍历、求单链表中节点的个数、查找单链表中的中间结点、判断单链表是否有环、取出有环链表中环的长度,删除有序链表中的重复结点
- Q392判断是否为平衡二叉树(后序遍历实现)
- 判断二叉搜索树的后序遍历序列是否合法
- 判断排序二叉树的后序遍历是否正确(对递归算的总结)
- 笔试面试之判断序列是否2叉查找树后序遍历
- 《程序员面试题精选》07.后序遍历结果判断其是否为二叉查找树
- 软件设计艺术大师基础--判断序列是否为二叉搜索树的后序遍历序列
- 数组的创建/查找数组里面的内容/添加数组中元素/使用指定的字符串把数组链接起来/判断数组内是否有指定的数组元素/四种遍历进行输出数组中的元素有哪些
- 判断给定数组是否是二叉树的前序或者后序遍历结果
- [PHP]算法- 判断是否为二叉搜索树的后序遍历序列的PHP实现
- 判断给定的数组是否为二叉搜索树的后序遍历序列
- 判断一个后序遍历是否正确