<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刷題實戰(zhàn)285:二叉搜索樹中的順序后繼

          共 2322字,需瀏覽 5分鐘

           ·

          2021-06-08 02:16

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

          今天和大家聊的問題叫做 二叉搜索樹中的中序后繼,我們先來看題面:
          https://leetcode-cn.com/problems/inorder-successor-in-bst/

          Given a binary search tree and a node in it, find the in-order successor of that node in the BST.


          The successor of a node p is the node with the smallest key greater than p.val.

          給你一個二叉搜索樹和其中的某一個結(jié)點,請你找出該結(jié)點在樹中順序后繼的節(jié)點。結(jié)點 p 的后繼是值比 p.val 大的結(jié)點中鍵值最小的結(jié)點。

          示例


          輸入: root = [2,1,3], p = 1
          輸出: 2
          解析: 這里 1 的順序后繼是 2。
          請注意 p 和返回值都應(yīng)是 TreeNode 類型。


          解題


          這道題讓我們求二叉搜索樹的某個節(jié)點的中序后繼節(jié)點,那么根據(jù) BST 的性質(zhì)知道其中序遍歷的結(jié)果是有序的,博主最先用的方法是用迭代的中序遍歷方法,然后用一個 bool 型的變量b,初始化為 false,進行中序遍歷,對于遍歷到的節(jié)點,首先看如果此時b已經(jīng)為 true,說明之前遍歷到了p,那么此時返回當(dāng)前節(jié)點,如果b仍為 false,看遍歷到的節(jié)點和p是否相同,如果相同,此時將b賦為 true,那么下一個遍歷到的節(jié)點就能返回了,參見代碼如下:


          class Solution {
          public:
              TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) {
                  stack<TreeNode*> s;
                  bool b = false;
                  TreeNode *t = root;
                  while (t || !s.empty()) {
                      while (t) {
                          s.push(t);
                          t = t->left;
                      }
                      t = s.top(); s.pop();
                      if (b) return t;
                      if (t == p) b = true;
                      t = t->right;
                  }
                  return NULL;
              }
          };


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

          上期推文:

          LeetCode1-280題匯總,希望對你有點幫助!

          LeetCode刷題實戰(zhàn)281:鋸齒迭代器

          LeetCode刷題實戰(zhàn)282:給表達式添加運算符

          LeetCode刷題實戰(zhàn)283:移動零

          LeetCode刷題實戰(zhàn)284:頂端迭代器


          瀏覽 60
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  天天日天天干天天射 | 日韩欧美中文字幕免费看 | 青青草视频在线免费 | 久久久高清无码视频 | 野花社区一区二区三区 |