UvaOJ 112 – Tree Summing

來源:互聯網
上載者:User

題目

就是給你一個所謂的二叉樹的S-expression 讓你判斷是否存在指定的 根到葉子的路徑和。

我在這裡用到cin.putback() (C裡有 int ungetcA(int ch, FILE *stream) 在cstdio中),方便把下一個字元拿出來判斷後再塞回緩衝區,最後用格式化讀。

特別注意的是,題目所說的葉子,必須具有(integer()()) 這樣的形式才是一個葉子,也就是不是算到() 這裡的。開始我一直拿()當路徑的結尾,結果就wa了。也是,怎麼能拿空節點當葉子呢....好像有點sb...

另外,ac後又測試了下,輸入資料中 數字間都沒有空格,不是在這裡wa的。


代碼:

//二叉樹,遞迴。C裡有沒有類似 cin.putback(char)  ??#include<cstdio>#include<cstring>#include<iostream>using namespace std;#define MAXN 1000002//沒說多少?int n;char Rchar(){char t;while(scanf("%c", &t) && (t==' ' || t=='\n')){}return t;}int solve(int root, int sum)//(3(...)(...)){Rchar();//'('char t = Rchar();if(t==')'){if(sum+root == n) { char buf[3];buf[0] = Rchar();buf[1] = Rchar();cin.putback(buf[1]);cin.putback(buf[0]);if(buf[0] == '(' && buf[1] == ')') return 1;//證明是子葉else return 0;}else return 0;}cin.putback(t);//!!!!!!c 裡有沒有相應函數?int r;scanf("%d", &r);int ret1 = solve(r, sum+root);int ret2 = solve(r, sum+root);Rchar();//')'return ret1 || ret2;}int main(){while(scanf("%d", &n)!=EOF){printf(solve(0, 0)? "yes": "no");putchar('\n');}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.