Same Tree
我觉得和树的遍历很像,想用递归,不过返回值那块我很迷茫,递归使用栈,返回值是返回给上一层的,我怎么才能让递归只返回一个bool值呢,
阶乘可以用递归来写,返回值也只有一个,如果我一定这样写的话,我就让返回值做“与”操作,感觉程序写出来很ugly,不管了,小菜鸟先这么写着,之后再参看网上大牛的大作,嘿嘿
呃,也许不是吧,递归中return到底是什么样子的呀,写个小程序看看吧:
1 #include <iostream> 2 3 using namespace std; 4 5 //判断2个数组中元素是否都相等 6 //程序本身没有什么意思,一些条件也没有判断,比如说为空什么的, 7 //我只是想看看递归中return是什么的情况,呵呵 8 9 10 bool is_same_value(int a[],int b[],int i,int n) 11 { 12 if(i==n) 13 { 14 return true; 15 } 16 if(a[i]!=b[i]) 17 { 18 return false; 19 } 20 else 21 { 22 return is_same_value(a,b,i+1,n); 23 } 24 } 25 int main() 26 { 27 int a[]= {1,2,3,4,5}; 28 int b[]= {1,2,3,3,5}; 29 cout<<is_same_value(a,b,0,5)<<endl; 30 return 0; 31
调试一下发现当走到return false时,就返回到main了(我看的是直接返回main了,但感觉不应该是这样的吧),但是一般递归中的返回我还是不懂。
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 bool isSameTree(TreeNode *p, TreeNode *q) { 13 //if(p==NULL&&q==NULL) 14 if(!p && !q) 15 { 16 return true; 17 } 18 //else if((p==NULL&&q!=NULL)||(p!=NULL&&q==NULL)||(p->val!=q->val)) 19 else if((!p && q)||(p && !q)||(p->val!=q->val)) 20 { 21 return false; 22 } 23 else 24 { 25 /*isSameTree(p->left,q->left); 26 isSameTree(p->right,q->right);*/ //这样写是错的 27 return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right); 28 } 29 } 30 };
posted on 2014-03-07 10:33 crane_practice 阅读(188) 评论(0) 编辑 收藏 举报