• C++ 二叉树的创建于遍历


    头文件(bitree.hpp)

      1 #pragma
      2 #include<iostream>
      3 #include<queue>
      4 #include<vector>
      5 #include<stack>
      6 using namespace std;
      7 struct TreeNode
      8 {
      9     int NodeData;
     10      TreeNode *pLeft;
     11      TreeNode *pRight;
     12     TreeNode(int x) :NodeData(x), pLeft(NULL),pRight(NULL) {}
     13 };
     14 class Mytree
     15 {
     16 public:
     17     void insertTree(TreeNode* proot,int n)
     18     {
     19 
     20     }
     21     void PreOrderno(TreeNode *T)//前序遍历,递归
     22     {
     23         if (!T)
     24             return;
     25         if (T)
     26         {
     27             cout << T->NodeData << endl;
     28             PreOrderno(T->pLeft);
     29             PreOrderno(T->pRight);
     30             
     31         }
     32 
     33     }
     34     void PreOrder(TreeNode *T)//非递归,前序遍历
     35     {
     36         if (T == NULL)
     37         {
     38             return;
     39         }
     40         stack<TreeNode*>s;
     41         s.push(T);
     42         TreeNode *temp;
     43         while (!s.empty())
     44         {
     45             temp = s.top();
     46             cout << temp->NodeData;
     47             s.pop();
     48             if (temp->pLeft)
     49             {
     50                 s.push(temp->pLeft);
     51             }
     52             if (temp->pRight)
     53             {
     54                 s.push(temp->pRight);
     55             }
     56         }
     57     }
     58 
     59     void InOrder(TreeNode *T)//中序遍历
     60     {
     61         if (!T)
     62             return;
     63         InOrder(T->pLeft);
     64         cout << T->NodeData;
     65         InOrder(T->pRight);
     66     }
     67 
     68     void PostOrder(TreeNode *T)//后序遍历
     69     {
     70         if (!T)
     71             return;
     72         PostOrder(T->pLeft);
     73         PostOrder(T->pRight);
     74         cout << T->NodeData;
     75     }
     76     void Levelorder(TreeNode *T)//层析遍历
     77     {
     78         if (!T)
     79             return;
     80         TreeNode *temp;
     81         queue<TreeNode*>q;
     82         q.push(T);
     83         while (!q.empty())
     84         {
     85             temp = q.front();
     86             cout << temp->NodeData;
     87             if (temp->pLeft)
     88                 q.push(temp->pLeft);
     89             if (temp->pRight)
     90                 q.push(temp->pRight);
     91             q.pop();
     92         }
     93     }
     94     void DeepOrder(TreeNode *T)//深度遍历
     95     {
     96         if (!T)
     97             return;
     98         TreeNode *temp;
     99         stack<TreeNode*>s;
    100         s.push(T);
    101         while (!s.empty())   
    102         {
    103             temp = s.top();
    104             cout << temp->NodeData;
    105             s.pop();
    106             if (temp->pLeft)
    107                 s.push(temp->pLeft);
    108             if (temp->pRight)
    109                 s.push(temp->pRight);
    110         }
    111     }
    112 private:
    113 
    114 };   
     1 #include "bitree.hpp"
     2 int main()
     3 {
     4     Mytree mytree;
     5     TreeNode *pRoot;
     6 
     7     TreeNode node1(1);
     8     TreeNode node2(2);
     9     TreeNode node3(3);
    10     TreeNode node4(4);
    11     TreeNode node5(5);
    12     TreeNode node6(6);
    13     TreeNode node7(7);
    14     TreeNode node8(8);    
    15     pRoot = &node1;
    16     node1.pLeft = &node2;
    17     node1.pRight = &node3;
    18     node2.pLeft = &node4;
    19     node2.pRight = &node5;
    20     node3.pLeft = &node6;
    21     node3.pRight = &node7;
    22     node4.pLeft = &node8;
    23     //深度遍历
    24     cout << "前序遍历:" << endl;
    25     mytree.PreOrderno(pRoot);
    26     cout << "深度遍历:" << endl;
    27     mytree.DeepOrder(pRoot);
    28     cout << "中序遍历:" << endl;
    29     mytree.InOrder(pRoot);
    30     cout << "层析遍历:" << endl;
    31     mytree.Levelorder(pRoot);
    32     cout << "前序非递归遍历:" << endl;
    33 
    34     mytree.PreOrder(pRoot);
    35     cout << "后续遍历:" << endl;
    36     mytree.PostOrder(pRoot);
    37 
    38 }
  • 相关阅读:
    poj-1069(三角形和六边形)(转)
    poj-1024(唯一最短路径)(转)
    poj-1022(四维模仿)(转)
    poj-1020(填蛋糕)(转)
    poj-1011
    poj-1010(转)
    poj-2312
    nyoj--幸运三角形
    nyoj--Divideing Jewels
    关于 APP在接入flutter之后在多任务下看不到AppName,只有APP图标,正常应该是APP图标+APP名称
  • 原文地址:https://www.cnblogs.com/hsy1941/p/11867432.html
Copyright © 2020-2023  润新知