二叉树的中序遍历
Posted 、工藤新一
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的中序遍历相关的知识,希望对你有一定的参考价值。
二叉树的三种遍历方式,其中每一种遍历方式都有三种实现方式。
节点定义:
struct TreeNode
{
int val;
TreeNode *left,*right;
TreeNode(int val){
this->val = val;
this ->left = this->right = NULL;
}
};
中序遍历
中序遍历:先访问左孩点,然后访问根节点,最后访问右孩子。
所以,上面遍历的结果是:DEAGHCS。
下面,我们来看看具体代码实现
1.递归实现
void InOrder(TreeNode *root){
if (root==NULL)
return;
InOrder(root->left);
cout<<root->val<<endl;
InOrder(root->right);
}
2.使用辅助栈
实现思路:
初始化一个二叉树结点pNode指向根结点;
若pNode非空,那么就把pNode入栈,并把pNode变为其左孩子;(直到最左边的结点)
若pNode为空,弹出栈顶的结点,并访问该结点,将pNode指向其右孩子(访问最左边的结点,并遍历其右子树)
具体实现:
void InOrder(TreeNode *root){
if (root==NULL)
{
return;
}
stack<TreeNode*> stk;
TreeNode *pNode = root;
while(pNode!=NULL || !stk.empty()){
if (pNode != NULL)
{
stk.push(pNode);
pNode = pNode->left;
}
else{
pNode = stk.pop();
stk.pop();
cout<<pNode->val<<endl;
pNode = pNode->right;
}
}
}
附:二叉树的先序遍历
附:二叉树的中序遍历
附:二叉树的后序遍历
附:二叉树的三种遍历对比及用图片展现说明
以上是关于二叉树的中序遍历的主要内容,如果未能解决你的问题,请参考以下文章