1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| struct Solution;
#[derive(Debug, PartialEq, Eq)] pub struct TreeNode { pub val: i32, pub left: Option<Rc<RefCell<TreeNode>>>, pub right: Option<Rc<RefCell<TreeNode>>>, }
impl TreeNode { #[inline] pub fn new(val: i32) -> Self { TreeNode { val, left: None, right: None, } } } use std::cell::RefCell; use std::rc::Rc;
impl Solution { pub fn count_nodes(root: Option<Rc<RefCell<TreeNode>>>) -> i32 { fn height(mut node: Option<Rc<RefCell<TreeNode>>>) -> i32 { let mut h = 0; while let Some(n) = node { h += 1; node = n.borrow().left.clone(); } h }
match root { None => 0, Some(node) => { let left_h = height(node.borrow().left.clone()); let right_h = height(node.borrow().right.clone());
if left_h == right_h { 1 + (1 << left_h) - 1 + Self::count_nodes(node.borrow().right.clone()) } else { 1 + (1 << right_h) - 1 + Self::count_nodes(node.borrow().left.clone()) } } } } }
fn main() { println!("Hello, world!"); }
|