Timeline
Timeline
2025-10-28
init
Depth-first traversal
Problem:
Depth-first traversal; preorder, inorder, or postorder traversal of the tree all work. Here we choose preorder traversal.
✔ Preorder traversal ⊂ depth-first traversal
✘ But DFS ≠ only preorder traversalit also has two other forms: inorder and postorder.
More specifically:
| Traversal method | Belongs to DFS? | Order description (for binary tree) |
|---|---|---|
| Preorder traversal (Preorder) | Yes, DFS | Root → Left → Right |
| Inorder traversal (Inorder) | Yes, DFS | Left → Root → Right |
| Postorder traversal (Postorder) | Yes, DFS | Left → Right → Root |
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | // Definition for a binary tree node.struct Solution;pub struct TreeNode { pub val: i32, pub left: Option<Rc<RefCell<TreeNode>>>, pub right: Option<Rc<RefCell<TreeNode>>>,}impl TreeNode { pub fn new(val: i32) -> Self { TreeNode { val, left: None, right: None, } }}use std::cell::RefCell;use std::collections::VecDeque;use std::rc::Rc;impl Solution { pub fn sum_numbers(root: Option<Rc<RefCell<TreeNode>>>) -> i32 { // Depth-first traversal let mut stack = VecDeque::new(); let mut sum = 0; if let Some(node) = root { let val = node.borrow().val; stack.push_back((node, val)); } else { return 0; } while let Some((node, val)) = stack.pop_back() { let node_ref = node.borrow(); if node_ref.left.is_none() && node_ref.right.is_none() { sum += val; } if let Some(right) = node_ref.right.clone() { let right_val = right.borrow().val; stack.push_back((right, val * 10 + right_val)); } if let Some(left) = node_ref.left.clone() { let left_val = left.borrow().val; stack.push_back((left, val * 10 + left_val)); } } sum }} |
Depth-First Search
1234567891011121314151617 | class Solution {public: int dfs(TreeNode* root, int prevSum) { if (root == nullptr) return 0; int sum = prevSum * 10 + root->val; if (root->left == nullptr && root->right == nullptr) return sum; else return dfs(root->left, sum) + dfs(root->right, sum); } int sumNumbers(TreeNode* root) { return dfs(root, 0); }}; |
