# re: 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) 回复 更多评论
你好,我是新手,在用VC调试时发现错误
f:/hwh/二叉树/binarytree.h(64) : error C2027: use of undefined type 'BinaryTree'
f:/hwh/二叉树/binarytree.h(8) : see declaration of 'BinaryTree'
main.cpp
f:/hwh/二叉树/binarytree.h(64) : error C2027: use of undefined type 'BinaryTree'
f:/hwh/二叉树/binarytree.h(8) : see declaration of 'BinaryTree'
执行 cl.exe 时出错.
二叉树.exe - 1 error(s), 0 warning(s)
为什么呢?
# re: 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) 回复 更多评论
@tomy
你用的什么编译器?我用的VS2003,其次,你的工程里面有几个文件?这里一共有三个文件:binarytree.h,binarytree.cpp,main.cpp
# re: 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法)[未登录] 回复 更多评论
我用DEV C++编译后报以下信息,请指教:
C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/cceIaaaa.o(.text+0x52d):main.cpp: undefined reference to `BinaryTree::Traverse(BinaryTree::TraverseType, bool)'
C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/cceIaaaa.o(.text+0x62f):main.cpp: more undefined references to `BinaryTree::Traverse(BinaryTree::TraverseType, bool)' follow
C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/cceIaaaa.o(.text+0x676):main.cpp: undefined reference to `BinaryTree::~BinaryTree()'
collect2: ld returned 1 exit status
# re: 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) 回复 更多评论
楼上的错误是DEV C++的工程文件/配置文件的问题吧?
# re: 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) 回复 更多评论
请问,为什么我的窗口上什么都米有?只有一个“请按任意键继续”,用的是VC++ 2008
# re: 二叉树遍历算法集合(前中后序遍历的递归和非递归算法,层序遍历算法) 回复 更多评论
其实如果不用 Stack 而改用 List 的话,三种非递归遍历将变得更加简单一致,一个 While 就够了
typedef std::list<BinaryTree::PTreeNode> TreeNodeList;
typedef struct TreeNode
{
Item Node;
TreeNode* pRight;
TreeNode* pLeft;
bool bVisited; // 关键
TreeNode(Item node = 0, TreeNode* pright = NULL, TreeNode* pleft = NULL)
: Node(node)
, pRight(pright)
, pLeft(pleft)
, bVisited(false)
{
}
}TreeNode, *PTreeNode;
// 非递归前序遍历树
void BinaryTree::NoRecPreTraverseImpl(PTreeNode pTreenode)
{
if (NULL == pTreenode)
return;
TreeNodeList NodeList;
PTreeNode pNode;
NodeList.push_front(pTreenode);
while (!NodeList.empty())
{
pNode = NodeList.front();
NodeList.pop_front();
std::cout << "Item = " << pNode->Node << std::endl;
if(pNode->pRight != NULL) NodeList.push_front(pNode->pRight);
if(pNode->pLeft != NULL) NodeList.push_front(pNode->pLeft);
}
}
// 非递归中序遍历树
void BinaryTree::NoRecInTraverseImpl(PTreeNode pTreenode)
{
if (NULL == pTreenode)
return;
TreeNodeList NodeList;
PTreeNode pNode;
NodeList.push_front(pTreenode);
while (!NodeList.empty())
{
pNode = NodeList.front();
if(pNode->bVisited)
{
NodeList.pop_front();
pNode->bVisited = false; // 为下一次遍历做准备
std::cout << "Item = " << pNode->Node << std::endl;
if(pNode->pRight != NULL) NodeList.push_front(pNode->pRight);
}
else
{
if(pNode->pLeft != NULL) NodeList.push_front(pNode->pLeft);
pNode->bVisited = true;
}
}
}
// 非递归后序遍历树
void BinaryTree::NoRecPostTraverseImpl(PTreeNode pTreenode)
{
if (NULL == pTreenode)
return;
TreeNodeList NodeList;
PTreeNode pNode;
NodeList.push_front(pTreenode);
while (!NodeList.empty())
{
pNode = NodeList.front();
if(pNode->bVisited)
{
NodeList.pop_front();
pNode->bVisited = false; // 为下一次遍历做准备
std::cout << "Item = " << pNode->Node << std::endl;
}
else
{
if(pNode->pRight != NULL) NodeList.push_front(pNode->pRight);
if(pNode->pLeft != NULL) NodeList.push_front(pNode->pLeft);
pNode->bVisited = true;
}
}
}
评论