精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

二叉樹的遞歸和非遞歸的遍歷算法模板

開發 前端 算法
二叉樹的四種遍歷方式,前中后加上層序遍歷。對于二叉樹的前中后層序遍歷,每種遍歷都可以遞歸和循環兩種實現方法,且每種遍歷的遞歸實現都比循環實現要簡潔。

[[423968]]

刷Leetcode,需要知道一定的算法模板,本次先總結下二叉樹的遞歸和非遞歸的遍歷算法模板。

二叉樹的四種遍歷方式,前中后加上層序遍歷。對于二叉樹的前中后層序遍歷,每種遍歷都可以遞歸和循環兩種實現方法,且每種遍歷的遞歸實現都比循環實現要簡潔。下面做一個小結,看了《代碼隨想錄》哈工大大佬的刷題指南,深受啟發,因,下面代碼有一定來源《代碼隨想錄》。

遞歸

下面偽代碼是二叉樹遍歷的遞歸算法模板,順序是中左右,也就是前序遍歷,改變中左右三行代碼的順序,前中后序三種遞歸遍歷輕松解決。

  1. def preorderTraversal(root: TreeNode) -> List[int]: 
  2.     res = [] 
  3.     def help(root): 
  4.         if not root: return 
  5.         res.append(root.val) # 中 
  6.         help(root.left) # 左 
  7.         help(root.right) # 右 
  8.     help(root) 
  9.     return res 

對此也提供C++代碼,遞歸算法模板一定要加上終止條件,不然一入遞歸深似海,從此offer是路人,來源代碼隨想錄。

  1. void help(TreeNode * root , vector<int> &res) { 
  2.     if (root == nullptr) { 
  3.         return
  4.     } 
  5.     res.push_back(root->val); // 中 
  6.     help(root->left,res); // 左 
  7.     help(root->right,res); //右 
  8.  
  9.  
  10. vector<int> preorderTraversal(TreeNode* root) { 
  11.     vector<int> res; 
  12.     help(root,res); 
  13.     return res; 

迭代

迭代遍歷二叉樹的比遞歸難度加大,其實使用了一個棧的數據結構,《代碼隨想錄》非常巧妙的使用空指針來作標記,原理是將處理的節點放入棧之后,緊接著放入一個空指針作為標記。

由于棧是先進后出,所以前序遍歷的順序中左右,在加到棧中,需要反過來進行添加,每添加一個元素在后面添加一個空指針,在Python中也可以使用None來代替。

下面是具體的偽代碼,至于中序和后序遍歷,改下向棧中添加節點的順序即可。

  1. def preorderTraversal(root: TreeNode) -> List[int]: 
  2.       result = [] 
  3.       st= [] 
  4.       # 1、判斷root 
  5.       if root: 
  6.           st.append(root) 
  7.       while st: 
  8.           node = st.pop() 
  9.           if node != None: 
  10.               # 右左中 添加到棧中,然后中左右拿出 
  11.               if node.right: #右 
  12.                   st.append(node.right
  13.               if node.left: #左 
  14.                   st.append(node.left
  15.               st.append(node) #中 
  16.               # 添加一個空指針 記錄節點 
  17.               st.append(None) 
  18.           else:  
  19.              # node是空指針,那么下一個就是加入的節點 
  20.               node = st.pop() 
  21.               result.append(node.val) 
  22.       return result 

下面是具體的C++代碼,由于C++中的stack中pop之后,沒有返回值,因此需要額外注意。

  1. vector<int> preorderTraversal(TreeNode* root) { 
  2.         vector<int>res; 
  3.         stack<TreeNode*> st; 
  4.         if (root != nullptr) st.push(root); 
  5.         while(!st.empty()){ 
  6.             TreeNode* node = st.top(); 
  7.             if(node != nullptr){ 
  8.                 st.pop(); 
  9.                 if(node->right) st.push(node->right); 
  10.                 if (node->left) st.push(node->left); 
  11.                 st.push(node); 
  12.                 st.push(NULL); 
  13.             }else
  14.                 // 需要額外注意下 
  15.                 st.pop(); 
  16.                 node = st.top(); 
  17.                 st.pop(); 
  18.                 res.push_back(node->val); 
  19.             } 
  20.         } 
  21.         return res; 
  22.      
  23.     } 

層次遍歷

其實,樹的遍歷也分為兩種,分別是深度優先遍歷和廣度優先遍歷。關于樹的不同深度優先遍歷(前序,中序和后序遍歷)就是遞歸和非遞歸的寫法。廣度優先遍歷在樹中,就是層次遍歷。

在二叉樹的層級遍歷中,我們需要用到隊列這個數據結構,幫助我們完成遍歷。

在Python偽代碼中,

  1. def levelOrder(root: TreeNode) -> List[List[int]]: 
  2.  # 1、判斷root 
  3.    if not root: 
  4.         return [] 
  5.     # 把root添加到quene 中 
  6.     quene = [root] 
  7.     out_list = [] 
  8.     while quene: 
  9.      # while 第一步就是求length  
  10.         length = len(queue)   
  11.         in_list = [] 
  12.         for _ in range(length): 
  13.          # 在C++中,這里需要兩行 
  14.             curnode = queue.pop(0)  # (默認移除列表最后一個元素)這里需要移除隊列最頭上的那個 
  15.             in_list.append(curnode.val) 
  16.             if curnode.left: queue.append(curnode.left
  17.             if curnode.right: queue.append(curnode.right
  18.         out_list.append(in_list) 
  19.     return out_list 

通過上面的Python偽代碼,進行書寫更高效的C++代碼。

  1. class Solution { 
  2. public
  3.     vector<vector<int>> levelOrder(TreeNode* root) { 
  4.         vector<vector<int>> res; 
  5.         queue<TreeNode*> que; 
  6.         // 判斷  root 
  7.         if (root != nullptr) que.push(root); 
  8.         while(!que.empty()) { 
  9.              // 開始先求隊列的長度 
  10.             int size = que.size(); 
  11.             vector<int> vec; 
  12.             // 迭代添加節點元素 
  13.             for (int i = 0 ; i<size; i++){ 
  14.                 TreeNode* node = que.front(); 
  15.                 que.pop(); 
  16.                 vec.push_back(node->val); 
  17.                 if (node->left) que.push(node->left); 
  18.                 if (node->right) que.push(node->right); 
  19.             } 
  20.             res.push_back(vec); 
  21.         } 
  22.         return res; 
  23.     } 
  24. }; 

上述為樹的遍歷模板。其實本質上也是深度優先遍歷與廣度優先遍歷的算法模板,許多其它操作都是建立在樹遍歷操作的基礎之上,因此掌握樹的所有遍歷方法,等于解決了一半樹的題目。

 

責任編輯:姜華 來源: Python之王
相關推薦

2021-07-13 11:32:41

二叉樹數據結構算法

2021-09-15 07:56:32

二叉樹層次遍歷

2020-04-27 07:05:58

二叉樹左子樹右子樹

2013-07-15 16:35:55

二叉樹迭代器

2021-08-06 11:34:05

二叉樹遞歸回溯

2022-10-26 23:58:02

二叉樹數組算法

2021-04-20 08:37:14

數據結構二叉樹

2009-08-11 13:29:57

C#二叉樹遍歷

2021-01-13 10:03:36

二叉樹層序遍歷層次遍歷

2023-05-08 15:57:16

二叉樹數據結構

2021-09-29 10:19:00

算法平衡二叉樹

2020-09-23 18:25:40

算法二叉樹多叉樹

2020-12-22 08:56:51

JavaScript數據結構前端

2021-09-28 06:28:51

二叉樹公共祖先

2020-11-10 09:52:16

遞歸算法代碼

2021-04-19 07:47:42

數據結構二叉樹Tree

2021-08-27 11:36:44

二叉樹回溯節點

2021-04-28 20:12:27

數據結構創建

2021-09-16 18:28:02

二叉樹遍歷遞歸

2021-03-22 08:23:29

LeetCode二叉樹節點
點贊
收藏

51CTO技術棧公眾號

制服丝袜第一页在线观看| 色999五月色| 亚洲成人生活片| 午夜久久av| 亚洲国产精品视频| 久久国产日韩欧美| 中文字幕精品在线观看| 亚洲激情中文| 亚洲精品国产综合久久| 三级4级全黄60分钟| av在线电影院| 成人免费视频一区| 国产精品wwww| 久久久精品国产sm调教网站| 日韩不卡在线视频| 亚洲6080在线| 日韩av一区二区三区美女毛片| 精品国产青草久久久久96| 欧美在线播放| 亚洲人成自拍网站| 下面一进一出好爽视频| 青草青在线视频| xnxx国产精品| 亚洲精品欧美日韩| 国产成人无码av| 国产探花一区在线观看| 91麻豆精品国产91久久久资源速度| 九九爱精品视频| 一广人看www在线观看免费视频| 国产宾馆实践打屁股91| 久久久久久伊人| 女人裸体性做爰全过| 成人爽a毛片| 欧美视频一区二区三区在线观看| 拔插拔插海外华人免费| 九色蝌蚪在线| 高清不卡一二三区| 国产精品亚洲精品| 国产一区二区三区影院| 66久久国产| 亚洲视频视频在线| 高清中文字幕mv的电影| 少妇高潮一区二区三区99| 欧美视频专区一二在线观看| 欧美性猛交内射兽交老熟妇| 成年人视频在线看| 久久影院午夜片一区| 亚洲自拍另类欧美丝袜| 探花国产精品一区二区| 亚洲欧美日韩国产一区| 久久久亚洲欧洲日产国码aⅴ| 一级黄色片日本| 成人3d动漫在线观看| 精品视频在线播放| 国产午夜在线一区二区三区| 国产成人免费视频网站视频社区 | 亚洲成人黄色av| 操欧美女人视频| 日韩视频永久免费| 涩多多在线观看| 99久久亚洲国产日韩美女| 91久久国产最好的精华液| 国产一区二区在线视频播放| h片精品在线观看| 亚洲福利一二三区| 无码人妻精品一区二区蜜桃网站| 日本网站在线免费观看视频| 国产欧美日产一区| 日韩视频在线播放| 国产粉嫩一区二区三区在线观看| 久久免费的精品国产v∧| 精品国产91亚洲一区二区三区www 精品国产_亚洲人成在线 | 日韩欧美一级大片| 粉嫩av性色av蜜臀av网站| 国内毛片久久| 亚洲成人黄色在线| www.啪啪.com| ccyy激情综合| 欧美zozo另类异族| 内射中出日韩无国产剧情| 国产99久久| 中文字幕在线看视频国产欧美在线看完整 | 久久av网站| 精品国产一区a| 国产女主播喷水高潮网红在线| 欧美在线免费看视频| 久久久精品久久| 久久草视频在线| 秋霞影院一区二区| 91久色国产| 可以在线观看的av| 国产精品欧美综合在线| 成人短视频在线观看免费| 中文在线аv在线| 7777精品久久久大香线蕉| 88av在线播放| 欧美a级成人淫片免费看| 欧美国产第一页| 中文字幕乱码中文字幕| 成人aaaa免费全部观看| 亚洲视频电影| 亚洲人体视频| 日韩欧美综合一区| 林心如三级全黄裸体| 亚洲精品欧洲| 亚洲综合社区网| 激情小说 在线视频| 亚洲综合视频网| 91香蕉视频导航| 欧美成人一区在线观看| 久久久国产一区二区| 亚洲va在线观看| 国产91精品入口| 一区二区三区在线视频111| 蜜桃视频在线观看播放| 欧美一区二区人人喊爽| 成人激情五月天| 夜夜嗨一区二区三区| 成人美女av在线直播| 加勒比一区二区三区在线| 午夜精品久久久久久久99水蜜桃 | 怡红院av久久久久久久| 高清不卡一区二区| 最近中文字幕免费mv| 成人欧美magnet| 欧美精品一区二区久久婷婷| 老熟妇高潮一区二区三区| 日韩激情视频网站| 免费日韩av电影| 97超碰免费在线| 欧美成人精品3d动漫h| 成人免费毛片xxx| 蜜桃av一区二区| 欧美精品与人动性物交免费看| 国精一区二区三区| 日韩一级高清毛片| 成人免费毛片xxx| 狠狠色丁香婷婷综合| 伊人久久大香线蕉午夜av| 国产成人免费| 日韩中文字幕免费看| 中文字幕一区二区三区四区免费看| 99久久99久久精品免费看蜜桃| 农民人伦一区二区三区| 国内精品免费| 97久久精品人人澡人人爽缅北| 六月丁香色婷婷| 亚洲va中文字幕| 在线观看免费视频黄| 日韩图片一区| 久久精品一二三区| 一区二区电影免费观看| 亚洲欧美在线免费| 天天干在线播放| 2023国产精品视频| 农村妇女精品一二区| 国产精品手机在线播放| 国产成人久久精品| 91激情在线| 欧美精三区欧美精三区 | 亚洲成人黄色影院| xxxx黄色片| 欧美一级网站| 四虎影视永久免费在线观看一区二区三区 | 亚洲男人天堂一区| 绯色av蜜臀vs少妇| 91久久亚洲| 欧美日韩一区二区三区在线观看免 | 亚洲欧洲视频在线观看| 黑人巨大精品欧美一区二区免费| 久久无码人妻精品一区二区三区| 欧美亚洲三区| 亚洲精品无人区| 精品久久久久久久久久岛国gif| 欧美人交a欧美精品| 亚洲AV第二区国产精品| 欧美亚洲综合色| 国产精品精品软件男同| 成人一级视频在线观看| 日本一区二区黄色| 97精品国产| 国产精品污www一区二区三区| 亚洲欧美韩国| 日韩在线www| 蜜桃久久一区二区三区| 在线观看视频91| 东方av正在进入| av亚洲精华国产精华| 韩国视频一区二区三区| 欧美激情五月| 青青草国产精品| 国产精品日韩精品在线播放| 久久久视频在线| 亚洲s色大片| 精品1区2区在线观看| 日韩xxx视频| 亚洲一区二区三区国产| 9.1片黄在线观看| 成人aa视频在线观看| 天堂一区在线观看| 国产精品久久国产愉拍| 日韩人妻精品一区二区三区| 一区二区美女| 波多野结衣精品久久| 成人在线视频免费| 午夜精品一区二区三区在线视| 免费网站成人| 亚洲欧美日韩高清| 午夜精品无码一区二区三区| 精品1区2区3区| 天天爽夜夜爽夜夜爽精品| 亚洲欧美另类综合偷拍| 国产在线综合视频| 久久毛片高清国产| 免费不卡的av| 国产在线观看一区二区| 最新中文字幕2018| 久久狠狠一本精品综合网| 日韩a级在线观看| 综合一区av| 一区二区冒白浆视频| 精品一区二区三区在线| 久久久久高清| 国产一级成人av| 国产91aaa| 日本99精品| 亚洲自拍偷拍第一页| 日韩专区视频| 国产精品香蕉在线观看| 成人免费毛片嘿嘿连载视频…| 日本一区二区三区四区视频| 九色porny丨入口在线| 性金发美女69hd大尺寸| 神马午夜伦理不卡| 欧美另类精品xxxx孕妇| 欧美激情视频在线播放| 中文字幕日韩精品在线观看| 男同在线观看| 亚洲天堂av在线播放| 欧美日韩国产中文字幕在线| 日韩精品亚洲视频| 日本午夜在线视频| 亚洲毛片在线免费观看| 你懂的视频在线免费| 亚洲欧美日韩精品久久奇米色影视| 日韩专区第一页| 亚洲精品福利资源站| 午夜性色福利视频| 精品亚洲aⅴ在线观看| 亚洲人午夜射精精品日韩| 日韩av在线一区| 久草视频视频在线播放| 亚洲视频在线看| 2019中文字幕在线视频| 波霸ol色综合久久| 羞羞视频在线观看免费| 欧美激情图片区| 9999精品成人免费毛片在线看 | 成人免费av网站| 日本黄色动态图| 久久久精品国产免费观看同学| 一级黄色性视频| 国产精品免费免费| 中文字幕在线2021| 亚洲va天堂va国产va久| 久久艹免费视频| 欧美性猛交xxxxxx富婆| 97国产精品久久久| 精品免费一区二区三区| 日韩二区三区| 日韩有码片在线观看| 欧美xxxx黑人又粗又长| 2019中文字幕在线观看| 欧美与亚洲与日本直播| 亚洲bt天天射| 日韩美女精品| 伊人av成人| 在线日韩中文| 欧美在线观看视频网站| 国产一区二区毛片| 亚洲制服丝袜在线播放| 中文字幕欧美激情一区| 黄色一级免费视频| 一本久久a久久精品亚洲| 国产sm主人调教女m视频| 亚洲韩国日本中文字幕| 91吃瓜网在线观看| 久久久久久久久电影| 欧洲精品一区二区三区| 亚洲一区久久久| 免费看av成人| 日本a在线天堂| 毛片av一区二区| 99久久久无码国产精品性波多| 国产日韩欧美一区二区三区综合| 久久国产精品国语对白| 日韩欧美中文字幕在线播放| 国产一区二区视频免费观看| 亚洲第一区在线观看| 成人高清免费在线播放| 国模吧一区二区| 四虎精品在线观看| 鲁丝一区二区三区免费| 欧美激情成人在线| 欧美精品无码一区二区三区| 国产成人亚洲精品青草天美| www.99热| 日韩欧美精品在线观看| 亚洲av无码乱码国产精品| 亚洲一区第一页| 国产福利片在线观看| 91免费视频国产| 日本久久综合| 黄色片久久久久| 成人毛片老司机大片| 中国一级片在线观看| 欧美在线播放高清精品| 亚欧在线观看视频| 欧美极品美女视频网站在线观看免费 | 亚洲精品视频在线观看网站| 无码人妻精品一区二区三区不卡| 精品久久久久av影院| 久操视频在线观看| 国产精选久久久久久| 精品一区av| 狠狠热免费视频| 久久久三级国产网站| 丰满少妇乱子伦精品看片| 精品国产一区二区三区四区四| а√资源新版在线天堂| 国产精品综合不卡av| 成人高清电影网站| 青青草av网站| 久久久精品黄色| 一级片在线观看免费| 亚洲精品美女在线观看播放| 欧美韩日亚洲| 国产二区一区| 亚洲国产午夜| 日韩精品一区二区三区高清免费| 夜夜精品浪潮av一区二区三区| 国产女人18毛片水18精| 久久久久北条麻妃免费看| 中文字幕日本一区| 91社在线播放| 韩国精品久久久| 欧美黄色aaa| 欧美大片一区二区| 国内高清免费在线视频| 国内一区二区三区在线视频| 一本色道久久| av小说在线观看| 欧美性xxxxx极品少妇| 成人性生交大片免费看午夜 | 国产免费黄色小视频| 成人免费观看av| 羞羞影院体验区| 国产亚洲成精品久久| 色999韩欧美国产综合俺来也| 天天爱天天做天天操| 国产一区二区剧情av在线| 久久激情免费视频| 亚洲精品乱码久久久久久金桔影视| 91黄页在线观看| 欧美国产综合视频| 人禽交欧美网站| 九九热视频精品| 亚洲精品小视频在线观看| 日本精品另类| 在线观看污视频| av男人天堂一区| 成人一二三四区| 久久久精品影院| 国产成人夜色高潮福利影视| 免费无码av片在线观看| 国产精品私房写真福利视频| 国产wwwwwww| 欧美重口另类videos人妖| 欧美成人直播| 久久性爱视频网站| 欧美自拍偷拍午夜视频| 91麻豆免费在线视频| 久久久久久国产精品一区| 日韩福利电影在线| 麻豆影视在线播放| 亚洲天堂色网站| 久久伦理中文字幕| 欧美视频免费播放| 亚洲免费av高清| 久久久久久久影视| 99国产高清| 日韩福利电影在线| 国产一级视频在线播放| 色偷偷综合社区| 福利欧美精品在线| 欧美第一页浮力影院| 精品女厕一区二区三区| 黄色av免费在线| 欧美日韩一区二| 成人动漫一区二区|