这篇文章主要介绍了C++非递归队列实现二叉树的广度优先遍历,实例分析了遍历二叉树相关算法技巧,并附带了两个相关算法实例,需要的朋友可以参考下
本文实例讲述了C++非递归队列实现二叉树的广度优先遍历。分享给大家供大家参考。具体如下:
广度优先非递归二叉树遍历(或者说层次遍历):
- void widthFirstTraverse(TNode* root) {
- queue<TNode*> q; // 队列
- q.enqueue(root);
- TNode* p;
- while(q.hasElement()) {
- p = q.dequeue(); // 队首元素出队列
- visit(p); // 访问p结点
- if(p->left)
- q.enqueue(p->left);
- if(p->right)
- q.enqueue(p->right);
- }
- }
附带两个相关示例:
1. 递归先序遍历二叉树
- void preTraverse(TNode* root) {
- if(!root)
- return;
- visit(root);
- preTraverse(root->left);
- preTraverse(root->Right);
- }
2. 非递归先序遍历二叉树
- void preTraverseNonRecursive(TNode* root) {
- stack<TNode> stack; // 栈
- stack.push(root);
- TNode* p;
- while(!stack.isEmpty()) { // 栈非空
- p = stack.pop();
- visit(p);
- if(p->pRight)
- s.push(p->pRight);
- if(p->pLeft)
- s.push(p->pLeft);
- }
- }
希望本文所述对大家的C++程序设计有所帮助。
新闻热点
疑难解答