二叉树的层序遍历,前序遍历(递归,非递归),中序遍历(递归,非递归),后续遍历(递归,非递归)
生活随笔
收集整理的這篇文章主要介紹了
二叉树的层序遍历,前序遍历(递归,非递归),中序遍历(递归,非递归),后续遍历(递归,非递归)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 二叉樹的層序遍歷
- 前序遍歷
- 遞歸版本
- 非遞歸版本
- 中序遍歷
- 遞歸版本
- 非遞歸版本
- 后序遍歷
- 遞歸版本
- 非遞歸版本
二叉樹的層序遍歷
void printTree(BinaryTree* arr[]) {queue<BinaryTree*> rel; rel.push(arr[0]);while (!rel.empty()){BinaryTree* front = rel.front();printf("%d\n", front->vec);rel.pop(); if (front->left != nullptr) //判斷最前面的左節(jié)點(diǎn)是否為空,不是則放入隊(duì)列rel.push(front->left);if (front->right != nullptr)//判斷最前面的右節(jié)點(diǎn)是否為空,不是則放入隊(duì)列rel.push(front->right);} }前序遍歷
遞歸版本
void PreOrder(bintree t){if(t){printf("%c ",t->data);PreOrder(t->lchild);PreOrder(t->rchild);}非遞歸版本
void preOrder2(BinTree *root) //非遞歸前序遍歷 {stack<BinTree*> s;BinTree *p=root;while(p!=NULL||!s.empty()){while(p!=NULL){cout<<p->data<<" ";s.push(p);p=p->lchild;}if(!s.empty()){p=s.top();s.pop();p=p->rchild;}} }中序遍歷
遞歸版本
void inOrder1(BinTree *root) //遞歸中序遍歷 {if(root!=NULL){inOrder1(root->lchild);cout<<root->data<<" ";inOrder1(root->rchild);} }非遞歸版本
void inOrder2(BinTree *root) //非遞歸中序遍歷 {stack<BinTree*> s;BinTree *p=root;while(p!=NULL||!s.empty()){while(p!=NULL){s.push(p);p=p->lchild;}if(!s.empty()){p=s.top();cout<<p->data<<" ";s.pop();p=p->rchild;}} }后序遍歷
遞歸版本
void postOrder1(BinTree *root) //遞歸后序遍歷 {if(root!=NULL){postOrder1(root->lchild);postOrder1(root->rchild);cout<<root->data<<" ";} }非遞歸版本
void postOrder2(BinTree *root) //非遞歸后序遍歷 {stack<BTNode*> s;BinTree *p=root;BTNode *temp;while(p!=NULL||!s.empty()){while(p!=NULL) //沿左子樹一直往下搜索,直至出現(xiàn)沒有左子樹的結(jié)點(diǎn) {BTNode *btn=(BTNode *)malloc(sizeof(BTNode));btn->btnode=p;btn->isFirst=true;s.push(btn);p=p->lchild;}if(!s.empty()){temp=s.top();s.pop();if(temp->isFirst==true) //表示是第一次出現(xiàn)在棧頂{temp->isFirst=false;s.push(temp);p=temp->btnode->rchild; }else //第二次出現(xiàn)在棧頂 {cout<<temp->btnode->data<<" ";p=NULL;}}} }總結(jié)
以上是生活随笔為你收集整理的二叉树的层序遍历,前序遍历(递归,非递归),中序遍历(递归,非递归),后续遍历(递归,非递归)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 子宫内膜异位症的发病率多少
- 下一篇: 成都大熊猫繁育研究基地购买上午场可以玩一