• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LilyLiya
博客园    首页    新随笔    联系   管理    订阅  订阅
Node Depths of BinaryTree
栈

refer to : https://www.algoexpert.io/questions/Node%20Depths


 

1. 问题描述。

二叉树的结点的深度(depth)定义为: 当前结点到二叉树的根的距离。 给定一个二叉树,求所有结点的深度的和。

 

2. 分析

每个结点的深度等于它的上一层结点的深度+ 1

 

3. recursive method。

# average case: balanced tree
# O(n) time | O(h) space, h is the height of the binary tree

 1 import java.util.*;
 2 
 3 class Program {
 4 
 5   public static int nodeDepths(BinaryTree root) {
 6     return helper(root, 0);
 7   }
 8     
 9   public static int helper(BinaryTree root, int depth){
10     if(root == null){
11        return 0;
12     }
13     return helper(root.left, depth + 1) + helper(root.right, depth+1) + depth;
14  }
15 
16   static class BinaryTree {
17     int value;
18     BinaryTree left;
19     BinaryTree right;
20 
21     public BinaryTree(int value) {
22       this.value = value;
23       left = null;
24       right = null;
25     }
26   }
27 }
 1 def nodeDepths(root,depth = 0 ):
 2     if root is None:
 3         return 0
 4     return depth + nodeDepths(root.left, depth + 1) + nodeDepths(root.right, depth + 1)
 5     
 6 
 7 
 8 # This is the class of the input binary tree.
 9 class BinaryTree:
10     def __init__(self, value):
11         self.value = value
12         self.left = None
13         self.right = None

 

4. iterative method

# average case: balanced tree
# O(n) time | O(h) space, h is the height of the binary tree

 1 import java.util.*;
 2 
 3 class Program {
 4 
 5   public static int nodeDepths(BinaryTree root) {
 6     int sumOfDepth = 0;
 7         List<Level> stack = new ArrayList<Level>();
 8         stack.add(new Level(root,0));
 9         while(stack.size()>0){
10             Level top = stack.remove(stack.size()-1);
11             BinaryTree node = top.root;
12             int depth = top.depth;
13             if(node == null) continue;
14             sumOfDepth += depth;
15             stack.add(new Level(node.left, depth + 1));
16             stack.add(new Level(node.right, depth + 1));
17         }
18         return sumOfDepth;
19   }
20     
21     static class Level{
22         public BinaryTree root;
23         int depth;
24         
25         public Level(BinaryTree root, int depth){
26             this.root = root;
27             this.depth = depth;
28         }
29     }
30 
31   static class BinaryTree {
32     int value;
33     BinaryTree left;
34     BinaryTree right;
35 
36     public BinaryTree(int value) {
37       this.value = value;
38       left = null;
39       right = null;
40     }
41   }
42 }
 1 def nodeDepths(root):
 2     sumOfDepths = 0
 3     stack = [{"node":root, "depth":0}]
 4     while len(stack)>0:
 5         nodeInfo = stack.pop()
 6         node, depth = nodeInfo["node"], nodeInfo["depth"]
 7         if node is None:
 8             continue
 9         sumOfDepths += depth
10         stack.append({"node":node.left, "depth":depth+1})
11         stack.append({"node":node.right, "depth":depth+1})
12     return sumOfDepths
13 
14 
15 # This is the class of the input binary tree.
16 class BinaryTree:
17     def __init__(self, value):
18         self.value = value
19         self.left = None
20         self.right = None

 

posted on 2021-01-07 07:35  LilyLiya  阅读(155)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3