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
}
}