【树】965. 单值二叉树

题目:

【树】965. 单值二叉树

 

 

 

解答:

方法一:深度优先搜索

思路与算法:

我们先进行一次深度优先搜索,获取这颗树中的所有节点的值。然后,就可以判断所有节点的值是不是都相等了。

 1 /**
 2  * Definition for a binary tree node.
 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 isUnivalTree(TreeNode* root) 
13     {
14         vector <int> ret;
15         if (NULL == root)
16         {
17             return true;
18         }
19 
20         dfs(root, ret);
21 
22         int i = 1;
23         for (i = 1; i < ret.size(); i++)
24         {
25             if (ret[i] != ret[i - 1])
26             {
27                 return false;
28             }
29         }
30         
31         return true;
32     }
33 
34     void dfs(TreeNode *root, vector<int> &ret)
35     {
36         if (root)
37         {
38             ret.push_back(root->val);
39             dfs(root->left, ret);
40             dfs(root->right, ret);
41         }
42     }
43 };

 

方法二:递归

思路与算法:

一颗树是单值的,当且仅当根节点的子节点所在的子树也是单值的,同时根节点的值与子节点的值相同。

我们可以使用递归实现这个判断的过程。left_correct 表示当前节点的左孩子是正确的,也就是说:左孩子所在的子树是单值的,并且当前节点的值等于左孩子的值。right_correct 对当前节点的右孩子表示同样的事情。递归处理之后,当根节点的这两种属性都为真的时候,我们就可以判定这颗二叉树是单值的。

 1 /**
 2  * Definition for a binary tree node.
 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 isUnivalTree(TreeNode* root) 
13     {
14         bool left_correct = (root->left == NULL ||
15                 (root->val == root->left->val && isUnivalTree(root->left)));
16         bool right_correct = (root->right == NULL ||
17                 (root->val == root->right->val && isUnivalTree(root->right)));
18         return left_correct && right_correct;
19     }
20 };

 

上一篇:LeetCode 965. 单值二叉树 (遍历二叉树)


下一篇:[LeetCode] 965. Univalued Binary Tree 单值二叉树