版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hf19931101/article/details/79478845
1.递归遍历
struct bnode
{
char data;
struct bnode *lchild,*rchild;
};
typedef bnode* bitre;
//递归先序遍历
void PreOrderRec(bitre root)
{
cout << root->data;
PreOrderRec(root->lchild);
PreOrderRec(root->rchild);
}
//递归中序遍历
void InOrderRec(bitre root)
{
PreOrderRec(root->lchild);
cout << root->data;
PreOrderRec(root->rchild);
}
//递归后序遍历
void InOrderRec(bitre root)
{
PreOrderRec(root->lchild);
PreOrderRec(root->rchild);
cout << root->data;
}
2.非递归遍历
struct bnode
{
char data;
struct bnode *lchild,*rchild;
};
typedef bnode* bitre;
struct TreeNode
{
bitre node;
bool vis;
TreeNode(bitre node, bool vis)
{
this->node = node;
this->vis = vis;
}
};
//先序遍历:根->左孩子->右孩子
void PreOrder(TreeNode root)
{
stack<TreeNode> stk;
stk.push(root);
while (!stk.empty())
{
TreeNode curNode = stk.top();
stk.pop();
if (!curNode.node)
{
continue;
}
if (curNode.vis)
{
cout << curNode.node->data;
}
else
{
stk.push(TreeNode(curNode.node->rchild, false));
stk.push(TreeNode(curNode.node->lchild, false));
stk.push(TreeNode(curNode.node, true));
}
}
}
//中序遍历:左孩子->根->右孩子
void InOrder(TreeNode root)
{
stack<TreeNode> stk;
stk.push(root);
while (!stk.empty())
{
TreeNode curNode = stk.top();
stk.pop();
if (!curNode.node)
{
continue;
}
if (curNode.vis)
{
cout << curNode.node->data;
}
else
{
stk.push(TreeNode(curNode.node->rchild, false));
stk.push(TreeNode(curNode.node, true));
stk.push(TreeNode(curNode.node->lchild, false));
}
}
}
//后序遍历: 左孩子->右孩子->根
void PostOrder(TreeNode root)
{
stack<TreeNode> stk;
stk.push(root);
while (!stk.empty())
{
TreeNode curNode = stk.top();
stk.pop();
if (!curNode.node)
{
continue;
}
if (curNode.vis)
{
cout << curNode.node->data;
}
else
{
stk.push(TreeNode(curNode.node, true));
stk.push(TreeNode(curNode.node->rchild, false));
stk.push(TreeNode(curNode.node->lchild, false));
}
}
}