int maxDepth(TreeNode* root) {
if (!root) return 0;
int left = maxDepth(root->left);
int right = maxDepth(root->right);
return 1 + max(left, right);
}
public int maxDepth(TreeNode root) {
if (root == null) return 0;
int left = maxDepth(root.left);
int right = maxDepth(root.right);
return 1 + Math.max(left, right);
}
def max_depth(root):
if not root: return 0
left = max_depth(root.left)
right = max_depth(root.right)
return 1 + max(left, right)
function maxDepth(root: TreeNode | null): number {
if (!root) return 0;
const left = maxDepth(root.left);
const right = maxDepth(root.right);
return 1 + Math.max(left, right);
}
int maxDepth(TreeNode* root) {
if (!root) return 0;
queue<TreeNode*> queue; queue.push(root);
int depth = 0;
while (!queue.empty()) {
depth++;
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode* node = queue.front(); queue.pop();
if (node->left) queue.push(node->left);
if (node->right) queue.push(node->right);
}
}
return depth;
}
public int maxDepth(TreeNode root) {
if (root == null) return 0;
Deque<TreeNode> queue = new ArrayDeque<>(); queue.add(root);
int depth = 0;
while (!queue.isEmpty()) {
depth++;
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
if (node.left != null) queue.add(node.left);
if (node.right != null) queue.add(node.right);
}
}
return depth;
}
def max_depth(root):
if not root: return 0
queue = deque([root])
depth = 0
while queue:
depth += 1
size = len(queue)
for _ in range(size):
node = queue.popleft()
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
return depth
function maxDepth(root: TreeNode | null): number {
if (!root) return 0;
const queue: TreeNode[] = [root];
let depth = 0;
while (queue.length > 0) {
depth++;
const size = queue.length;
for (let i = 0; i < size; i++) {
const node = queue.shift()!;
if (node.left) queue.push(node.left);
if (node.right) queue.push(node.right);
}
}
return depth;
}
int maxDepth(TreeNode* root) {
if (!root) return 0;
vector<pair<TreeNode*, int>> stack = {{root, 1}};
int best = 0;
while (!stack.empty()) {
auto [node, depth] = stack.back(); stack.pop_back();
best = max(best, depth);
if (node->right) stack.push_back({node->right, depth + 1});
if (node->left) stack.push_back({node->left, depth + 1});
}
return best;
}
public int maxDepth(TreeNode root) {
if (root == null) return 0;
Deque<Object[]> stack = new ArrayDeque<>(); stack.push(new Object[]{root, 1});
int best = 0;
while (!stack.isEmpty()) {
Object[] top = stack.pop(); TreeNode node = (TreeNode) top[0]; int depth = (Integer) top[1];
best = Math.max(best, depth);
if (node.right != null) stack.push(new Object[]{node.right, depth + 1});
if (node.left != null) stack.push(new Object[]{node.left, depth + 1});
}
return best;
}
def max_depth(root):
if not root: return 0
stack = [(root, 1)]
best = 0
while stack:
node, depth = stack.pop()
best = max(best, depth)
if node.right: stack.append((node.right, depth + 1))
if node.left: stack.append((node.left, depth + 1))
return best
function maxDepth(root: TreeNode | null): number {
if (!root) return 0;
const stack: [TreeNode, number][] = [[root, 1]];
let best = 0;
while (stack.length > 0) {
const [node, depth] = stack.pop()!;
best = Math.max(best, depth);
if (node.right) stack.push([node.right, depth + 1]);
if (node.left) stack.push([node.left, depth + 1]);
}
return best;
}
int maxDepth(TreeNode* root) {
int best = 0;
int depth = 1;
TreeNode* cur = root;
while (cur) {
if (!cur->left) {
best = max(best, depth);
cur = cur->right;
depth++;
} else {
TreeNode* pred = cur->left;
int steps = 1;
while (pred->right && pred->right != cur) {
pred = pred->right;
steps++;
}
if (!pred->right) {
best = max(best, depth);
pred->right = cur;
cur = cur->left;
depth++;
} else {
pred->right = nullptr;
depth -= steps;
cur = cur->right;
}
}
}
return best;
}
public int maxDepth(TreeNode root) {
int best = 0;
int depth = 1;
TreeNode cur = root;
while (cur != null) {
if (cur.left == null) {
best = Math.max(best, depth);
cur = cur.right;
depth++;
} else {
TreeNode pred = cur.left;
int steps = 1;
while (pred.right != null && pred.right != cur) {
pred = pred.right;
steps++;
}
if (pred.right == null) {
best = Math.max(best, depth);
pred.right = cur;
cur = cur.left;
depth++;
} else {
pred.right = null;
depth -= steps;
cur = cur.right;
}
}
}
return best;
}
def max_depth(root):
best = 0
depth = 1
cur = root
while cur:
if not cur.left:
best = max(best, depth)
cur = cur.right
depth += 1
else:
pred = cur.left
steps = 1
while pred.right and pred.right is not cur:
pred = pred.right
steps += 1
if not pred.right:
best = max(best, depth)
pred.right = cur
cur = cur.left
depth += 1
else:
pred.right = None
depth -= steps
cur = cur.right
return best
function maxDepth(root: TreeNode | null): number {
let best = 0;
let depth = 1;
let cur = root;
while (cur) {
if (!cur.left) {
best = Math.max(best, depth);
cur = cur.right;
depth++;
} else {
let pred = cur.left;
let steps = 1;
while (pred.right && pred.right !== cur) {
pred = pred.right;
steps++;
}
if (!pred.right) {
best = Math.max(best, depth);
pred.right = cur;
cur = cur.left;
depth++;
} else {
pred.right = null;
depth -= steps;
cur = cur.right;
}
}
}
return best;
}