//写法1: private int cur = 0; private int sum = 0; public int sumNumbers(TreeNode root) { if (root != null) { //当前节点不为空 cur = cur * 10 + root.val; //当前路径上的值加上去 if (root.left == null && root.right == null) { sum += cur; //如果是叶节点,加到最终结果 } else {//不是叶节点则继续遍历 sumNumbers(root.left); sumNumbers(root.right); } cur /= 10; //回溯 return sum;//返回 } else {//当前节点为空,返回0 return 0; } } //写法2: public int sumNumbers (TreeNode root) { dfs(root,0); //DFS遍历 return sum; } private int sum = 0; //存储结果 private void dfs(TreeNode root,int pathNum){ //pathNum:一条路径上的数 if(root==null)return ; // 节点空返回 pathNum = pathNum*10+root.val; // 更新pathNum if(root.left==null && root.right==null){//达到叶节点 sum+=pathNum; //加到sum }else{//非叶子节点,继续递归 dfs(root.left,pathNum); dfs(root.right,pathNum); } }