每日一题做题记录,参考官方和三叶的题解 |
题目要求
思路一:递归
- 就……先左再右……就好了
Java
class Solution {
public boolean isUnivalTree(TreeNode root) {
if(root == null)
return true;
if(root.left != null)
if(root.val != root.left.val || !isUnivalTree(root.left))
return false;
if(root.right != null)
if(root.val != root.right.val || !isUnivalTree(root.right))
return false;
return true;
}
}
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1),不考虑递归开销(考虑为 O ( n ) O(n) O(n))
C++
class Solution {
public:
bool isUnivalTree(TreeNode* root) {
if(!root)
return true;
if(root->left)
if(root->val != root->left->val || !isUnivalTree(root->left))
return false;
if(root->right)
if(root->val != root->right->val || !isUnivalTree(root->right))
return false;
return true;
}
};
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)
Rust
借助Rc/RefCell表达一棵二叉树,需通过
clone()
增加引用计数
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {
pub fn is_unival_tree(root: Option<Rc<RefCell<TreeNode>>>) -> bool {
fn is_val(root: Option<Rc<RefCell<TreeNode>>>, val: i32) -> bool {
if let Some(x) = root {
x.borrow().val == val && is_val(x.borrow().left.clone(), val) && is_val(x.borrow().right.clone(), val)
}
else {
true
}
}
let val = root.clone().unwrap().borrow().val;
is_val(root, val)
}
}
思路二:迭代
- 定义一个队列,先左后右……嗯
Java
class Solution {
public boolean isUnivalTree(TreeNode root) {
int val = root.val;
Deque<TreeNode> que = new ArrayDeque<>();
que.addLast(root);
while(!que.isEmpty()) {
TreeNode cur = que.pollFirst();
if(cur.val != val)
return false;
if(cur.left != null)
que.addLast(cur.left);
if(cur.right != null)
que.addLast(cur.right);
}
return true;
}
}
- 时间复杂度: O ( ) O() O()
- 空间复杂度: O ( n ) O(n) O(n)
C++
class Solution {
public:
bool isUnivalTree(TreeNode* root) {
int val = root->val;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()) {
TreeNode* cur = que.front();
que.pop();
if(cur->val != val)
return false;
if(cur->left)
que.push(cur->left);
if(cur->right)
que.push(cur->right);
}
return true;
}
};
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
总结
前几天刚误以为Rust搞不了结构体,这就来补上,了解一下Rc。
久违的快乐模拟~润了润了、绝没有敷衍!
欢迎指正与讨论! |