二叉树的中序遍历
如下图表示一颗二叉树,对它进行先序遍历操作,采用两种方法,递归和非递归操作。。
遍历结果为:4251637。。
1、递归操作:
思想:若二叉树为空,返回。否则
1)中序遍历左子树;2)访问根节点;3)中序遍历右子树
代码:
void InOrder(BiTree root) { if(root==NULL) return ; InOrder(root->lchild); //递归调用,中序遍历左子树 printf("%c ", root->data); //输出数据 InOrder(root->rchild); //递归调用,中序遍历右子树 }
2、非递归操作
代码:
void InOrderTraverse(BiTree T) // 中序遍历的非递归 { if(!T) return ; stack<BiTree> S; BiTree curr = T->lchild; // 指向当前要检查的节点 S.push(T); while(curr != NULL || !S.empty()) { while(curr != NULL) // 一直向左走 { S.push(curr); curr = curr->lchild; } curr = S.top(); S.pop(); cout<<curr->data<<" "; curr = curr->rchild; } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步