<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)145:二叉樹的后序遍歷

          共 1692字,需瀏覽 4分鐘

           ·

          2021-01-09 16:38

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做?二叉樹的后序遍歷,我們先來(lái)看題面:
          https://leetcode-cn.com/problems/binary-tree-postorder-traversal/

          Given the root of a binary tree, return the postorder traversal of its nodes' values.

          題意


          給定一個(gè)二叉樹,返回它的 后序 遍歷。

          樣例


          解題


          上一題目LeetCode刷題實(shí)戰(zhàn)144:二叉樹的前序遍歷?用了遞歸方法,這題也可以繼續(xù)用遞歸方法,不過這次我們換個(gè)方法來(lái)實(shí)現(xiàn),這樣才能學(xué)到更多有用的知識(shí) 。這次我們用利用棧+set輔助完成,具體實(shí)現(xiàn)看下面代碼,也做了完整的注釋了?。


          /**
          ?* Definition for a binary tree node.
          ?* struct TreeNode {
          ?* int val;
          ?* TreeNode *left;
          ?* TreeNode *right;
          ?* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
          ?* };
          ?*/

          class?Solution?{
          public:
          ??vector<int> postorderTraversal(TreeNode* root) {
          ????vector<int> result;
          ????set visited;//用于標(biāo)記已經(jīng)訪問過的節(jié)點(diǎn)
          ????stack myStack;//輔助棧,用于保留現(xiàn)場(chǎng)
          ????while?(root != NULL?|| !myStack.empty()) {
          ??????if?(root != NULL) {
          ????????myStack.push(root);//棧先保護(hù)根節(jié)點(diǎn)的現(xiàn)場(chǎng)
          ????????visited.insert(root);//標(biāo)記根節(jié)點(diǎn)已訪問
          ????????if?(root->right) {//右子樹不為空,保護(hù)右子樹現(xiàn)場(chǎng)
          ??????????myStack.push(root->right);
          ????????}
          ????????root = root->left;//現(xiàn)場(chǎng)轉(zhuǎn)移至左子樹
          ????????continue;
          ??????}
          ??????root = myStack.top();//恢復(fù)現(xiàn)場(chǎng)
          ??????myStack.pop();
          ??????while?(visited.find(root) != visited.end()) {//如果這個(gè)節(jié)點(diǎn)已經(jīng)訪問過(根節(jié)點(diǎn))
          ????????result.push_back(root->val);
          ????????if?(!myStack.empty()) {
          ??????????root = myStack.top();//再恢復(fù)現(xiàn)場(chǎng)
          ??????????myStack.pop();
          ????????}
          ????????else?{
          ??????????root == NULL;
          ????????????????????return?result;
          ????????}
          ??????}
          ????}
          ????return?result;
          ??}
          };


          好了,今天的文章就到這里,如果覺得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力。

          上期推文:

          LeetCode1-140題匯總,希望對(duì)你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)141:環(huán)形鏈表
          LeetCode刷題實(shí)戰(zhàn)142:環(huán)形鏈表 II
          LeetCode刷題實(shí)戰(zhàn)143:重排鏈表
          LeetCode刷題實(shí)戰(zhàn)144:二叉樹的前序遍歷


          瀏覽 44
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美日韩国产中文 | 免费看黃色AAAAAA片 | 亚洲精品成人片在线播放波多野吉 | 99热国产在线 | 黑人操比视频 |