typedef char ElemType;
typedef struct BtNode//BinaryTreeNode
{
ElemType data;
struct BtNode* leftchild;
struct BtNode* rightchild;
}BtNode,*BinaryTree;
struct StkNode
{
BtNode* pnode;
int pos;
public:
StkNode(BtNode* p) :pnode(p), pos(0) {
}
};
BtNode* Buynode()
{
BtNode* s = (BtNode*)malloc(sizeof(BtNode));
if (NULL == s)exit(1);
memset(s, 0, sizeof(BtNode));
return s;
}
//中序遍历
void InOrder(BtNode* p)
{
if (p != NULL)
{
InOrder(p->leftchild);
cout << p->data << " ";
InOrder(p->rightchild);
}
}
void NiceInOrder(BtNode* ptr)
{
if (ptr == NULL) return;
std::stack<BtNode*> st;
while (ptr != NULL || !st.empty())
{
while (ptr != NULL)
{
st.push(ptr);
ptr = ptr->leftchild;
}
ptr = st.top();
st.pop();
cout << ptr->data;
ptr = ptr->rightchild;
}
}
void StkNiceInOrder(BtNode* ptr)
{
if (ptr == NULL) return;
stack<StkNode> st;
st.push(StkNode(ptr));
while (!st.empty())
{
StkNode node = st.top(); st.pop();
if (++node.pos == 2)//中序遍历,当第二次出栈时打印
{
cout << node.pnode->data;
if (node.pnode->rightchild != NULL)//可能还存在右子树
{
st.push(StkNode(node.pnode->rightchild));
}
}
else
{
st.push(node);//记得入栈
if (node.pnode->leftchild != NULL)
{
st.push(StkNode(node.pnode->leftchild));
}
}
}
}
//先序遍历
void PreOrder(BtNode* p)
{
if (p != NULL)
{
cout << p->data << " ";
PreOrder(p->leftchild);
PreOrder(p-
265-C++ 二叉树代码
最新推荐文章于 2024-03-10 15:20:09 发布
本文详细介绍了如何使用C++编程语言实现二叉树的基本操作,包括创建、插入节点、遍历和删除节点等核心功能。通过实例代码,帮助读者深入理解二叉树的数据结构及其应用。
摘要由CSDN通过智能技术生成