LeetCode--Sum Root to Leaf Numbers
生活随笔
收集整理的這篇文章主要介紹了
LeetCode--Sum Root to Leaf Numbers
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path 1->2->3 which represents the number 123.
Find the total sum of all root-to-leaf numbers.
For example,
1/ \2 3The root-to-leaf path 1->2 represents the number 12.
The root-to-leaf path 1->3 represents the number 13.
Return the sum = 12 + 13 = 25.?
思路:類似于二叉樹的遍歷,遍歷的過過程中要記錄節點數據,并且轉化為sum(越接近葉子節點的節點的數值離各位最近,因為葉子節點是個位數,葉子節點的根節點是十位數。。。根root節點更高位),要標記已經計算過的節點(將值賦值為-1),葉子節點遍歷過回溯到根節點,繼續搜索。 #include<iostream> #include<stack> using namespace std; //二叉樹的定義 struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; int sumNumbers(TreeNode* root) {TreeNode* p = root;if(p==NULL) return 0; //棧,搜索節點時,存儲節點 stack<TreeNode*> s;//根到每一個葉子節點的和 int sum = 0;//sum 之和 int result = 0;//最左下的節點(不一定是葉子) while(p!=NULL){s.push(p);sum = sum * 10 + p->val;p = p->left;}while(!s.empty()){p = s.top();//不是葉子節點,且沒遍歷過 if(p->right!=NULL&&p->right->val!=-1){p = p->right;s.push(p);sum = sum*10 + p->val;while(p->left!=NULL){p = p->left;s.push(p);sum = sum*10 + p->val;}}else if(p->left==NULL && p->right == NULL)//葉子節點 {result += sum;//回溯到該節點的根 s.pop();sum/=10;//標記 p->val = -1;}//不是葉子節點,且已遍歷過 else if((p->left==NULL&&p->right!=NULL&&p->right->val==-1)||(p->right==NULL&&p->left!=NULL&&p->left->val==-1)||(p->left!=NULL&&p->right!=NULL&&p->left->val==-1&&p->right->val==-1)){s.pop();sum/=10;//標記p->val = -1; }}return result; } int main(void) {TreeNode* root = new TreeNode(9);TreeNode* p2 = new TreeNode(2);TreeNode* p3 = new TreeNode(3);TreeNode* p4 = new TreeNode(4);TreeNode* p5 = new TreeNode(5);TreeNode* p6 = new TreeNode(6);TreeNode* p7 = new TreeNode(7);root->left = p2;root->right = p3;p2->left = p4;p2->right = p5;p3->left = p6;p3->right = p7;int a = sumNumbers(root);cout<<a<<endl;delete(root);delete(p2);delete(p3);delete(p4);delete(p5);delete(p6);delete(p7);system("pause");return 0; }可以找一個比較“變態”的樹,走一遍程序,思路就會很清楚。
轉載于:https://www.cnblogs.com/sunp823/p/5601425.html
總結
以上是生活随笔為你收集整理的LeetCode--Sum Root to Leaf Numbers的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringMvc Intercetor
- 下一篇: VP-VC交换