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  阅读(187)  评论(0编辑  收藏  举报

导航