日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树的层序遍历,前序遍历(递归,非递归),中序遍历(递归,非递归),后续遍历(递归,非递归)

發布時間:2023/11/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树的层序遍历,前序遍历(递归,非递归),中序遍历(递归,非递归),后续遍历(递归,非递归) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 二叉樹的層序遍歷
  • 前序遍歷
    • 遞歸版本
    • 非遞歸版本
  • 中序遍歷
    • 遞歸版本
    • 非遞歸版本
  • 后序遍歷
    • 遞歸版本
    • 非遞歸版本

二叉樹的層序遍歷

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) //判斷最前面的左節點是否為空,不是則放入隊列rel.push(front->left);if (front->right != nullptr)//判斷最前面的右節點是否為空,不是則放入隊列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) //沿左子樹一直往下搜索,直至出現沒有左子樹的結點 {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) //表示是第一次出現在棧頂{temp->isFirst=false;s.push(temp);p=temp->btnode->rchild; }else //第二次出現在棧頂 {cout<<temp->btnode->data<<" ";p=NULL;}}} }

總結

以上是生活随笔為你收集整理的二叉树的层序遍历,前序遍历(递归,非递归),中序遍历(递归,非递归),后续遍历(递归,非递归)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。