<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)536: 從字符串生成二叉樹

          共 2847字,需瀏覽 6分鐘

           ·

          2022-02-26 12:34

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

          今天和大家聊的問題叫做?從字符串生成二叉樹,我們先來看題面:
          https://leetcode-cn.com/problems/construct-binary-tree-from-string/

          ou need to construct a binary tree from a string consisting of parenthesis and integers.

          The whole input represents a binary tree. It contains an integer followed by zero, one or two pairs of parenthesis. The integer represents the root's value and a pair of parenthesis contains a child binary tree with the same structure.

          You always start to construct the?left?child node of the parent first if it exists.

          你需要從一個(gè)包括括號(hào)和整數(shù)的字符串構(gòu)建一棵二叉樹。
          輸入的字符串代表一棵二叉樹。
          它包括整數(shù)和隨后的0,1或2對(duì)括號(hào)。
          整數(shù)代表根的值,一對(duì)括號(hào)內(nèi)表示同樣結(jié)構(gòu)的子樹。
          若存在左子結(jié)點(diǎn),則從左子結(jié)點(diǎn)開始構(gòu)建。

          示例? ? ? ? ? ? ? ? ? ? ? ? ?

          示例:
          輸入: "4(2(3)(1))(6(5))"
          輸出: 返回代表下列二叉樹的根節(jié)點(diǎn):

          ???????4
          ?????/ \
          ????2?????6
          ???/ \ /
          ??3???1?5???
          ?

          注意:
          輸入字符串中只包含 '(', ')', '-'?和 '0'?~ '9'?
          空樹由 ""?而非"()"表示。


          解題

          https://blog.csdn.net/qq_29051413/article/details/108814374

          本題使用遞歸求解。根據(jù)題目示例的提示可知,字符串第一個(gè)左括號(hào)之前的數(shù)字是根節(jié)點(diǎn),接著兩個(gè)連續(xù)的最大括號(hào)(如果有)分別為左子樹和右子樹,對(duì)左右子樹進(jìn)行同樣的遞歸操作即可,具體看代碼。

          class?Solution?{
          ????public?TreeNode str2tree(String s) {
          ????????if?(s.length() == 0) return?null;
          ????????StringBuilder value?= new?StringBuilder();
          ????????TreeNode root = new?TreeNode();
          ????????int?start = -1; // 第一個(gè)左括號(hào)的位置
          ????????// 確定根節(jié)點(diǎn)的權(quán)值
          ????????for?(int?i = 0; i < s.length(); i++) {
          ????????????if?(s.charAt(i) == '(') {
          ????????????????root.val = Integer.parseInt(value.toString());
          ????????????????start = i;
          ????????????????break;
          ????????????}
          ????????????if?(i == s.length() - 1) {
          ????????????????value.append(s.charAt(i));
          ????????????????root.val = Integer.parseInt(value.toString());
          ????????????????return?root;
          ????????????}
          ????????????value.append(s.charAt(i));
          ????????}
          ????????// 對(duì)左右子樹遞歸求解
          ????????int?count = 1; // 遇到左括號(hào)則++,遇到右括號(hào)則--
          ????????for?(int?i = start + 1; i < s.length(); i++) {
          ????????????if?('('?== s.charAt(i)) count++;
          ????????????if?(')'?== s.charAt(i)) count--;
          ????????????if?(count == 0) {
          ????????????????// 找到了左子樹的區(qū)間
          ????????????????root.left = str2tree(s.substring(start + 1, i));
          ????????????????if?(i != s.length() - 1) {
          ????????????????????// 剩余的就是右子樹的區(qū)間
          ????????????????????root.right = str2tree(s.substring(i + 2, s.length() - 1));
          ????????????????}
          ????????????????break; // 左右子樹整合完畢,結(jié)束
          ????????????}
          ????????}
          ????????return?root;
          ????}
          }


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

          上期推文:

          LeetCode1-520題匯總,希望對(duì)你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)521:最長(zhǎng)特殊序列 Ⅰ
          LeetCode刷題實(shí)戰(zhàn)522:最長(zhǎng)特殊序列 II
          LeetCode刷題實(shí)戰(zhàn)523:連續(xù)的子數(shù)組和
          LeetCode刷題實(shí)戰(zhàn)524:通過刪除字母匹配到字典里最長(zhǎng)單詞
          LeetCode刷題實(shí)戰(zhàn)525:連續(xù)數(shù)組
          LeetCode刷題實(shí)戰(zhàn)526:優(yōu)美的排列
          LeetCode刷題實(shí)戰(zhàn)527:?jiǎn)卧~縮寫
          LeetCode刷題實(shí)戰(zhàn)528:按權(quán)重隨機(jī)選擇
          LeetCode刷題實(shí)戰(zhàn)529:掃雷游戲
          LeetCode刷題實(shí)戰(zhàn)530:二叉搜索樹的最小絕對(duì)差
          LeetCode刷題實(shí)戰(zhàn)531:孤獨(dú)像素 I
          LeetCode刷題實(shí)戰(zhàn)532:數(shù)組中的K-diff數(shù)對(duì)
          LeetCode刷題實(shí)戰(zhàn)533:孤獨(dú)像素 II
          LeetCode刷題實(shí)戰(zhàn)534:游戲玩法分析 III
          LeetCode刷題實(shí)戰(zhàn)535:TinyURL 的加密與解密

          瀏覽 25
          點(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>
                  中文在线资源天堂 | 小骚逼逼舒服使劲操逼 | 大香蕉国产在线观看 | 黄色性爱在线播放 | 久久久久久av |