LeetCode - Easy - 1022

方法一:递归法。

方法二:迭代法。

[](()Submission


import java.util.LinkedList;

import com.lun.util.BinaryTree.TreeNode;

public class SumOfRootToLeafBinaryNumbers {

//方法一:递归法

public int sumRootToLeaf(TreeNode root) {

int[] sum = {0};

sumRootToLeaf(root, 0, sum);

return sum[0];

}

private void sumRootToLeaf(TreeNode node, int pathSum, int[] sum) {

if(node == null)

return;

pathSum = (pathSum << 1) | node.val;

if(node.left == null && node.right == null)

sum[0] += pathSum;

sumRootToLeaf(node.left, pathSum, sum);

sumRootToLeaf(node.right, pathSum, sum);

}

//方法二:迭代法

public int sumRootToLeaf2(TreeNode root) {

int sum = 0;

LinkedList<Object[]> stack = new LinkedList<>();

stack.push(new Object[] {root, 0});

while(!stack.isEmpty()) {

Object[] arr = stack.pop();

TreeNode node = (TreeNode)arr[0];

int pathSum = (int)arr[1];

pathSum = (pathSum << 1) | node.val;

if(node.left == null && node.right == null)

sum += pathSum;

if(node.right != null)

stack.push(new Object[] {node.right, pathSum});

if(node.left != null)

stack.push(new Object[] {node.left, pathSum});

}

return sum;

}

}

[](()Test


import static org.junit.Assert.*;

import org.junit.Test;

import com.lun.util.BinaryTree;

public class SumOfRootToLeafBinaryNumbersTest {

@Test

public void test() {

SumOfRootToLeafBinaryNumbers obj = new SumOfRootToLeafBinaryNumbers();

assertEquals(22, obj.sumRootToLeaf(BinaryTree.integers2BinaryTree(1, 0, 1, 0, 1, 0, 1)));

assertEquals(0, obj.sumRootToLeaf(BinaryTree.integers2BinaryTree(0)));

assertEquals(1, obj.sumRootToLeaf(BinaryTree.integers2BinaryTree(1)));

assertEquals(3, obj.sumRootToLeaf(BinaryTree.integers2BinaryTree(1, 1)));

}

@Test

public void test2() {

SumOfRootToLeafBinaryNumbers obj = new SumOfRootToLeafBinaryNumbers();

assertEquals(22, obj.sumRootToLeaf2(BinaryTree.integers2BinaryTree(1, 0, 1, 0, 1, 0, 1)));

assertEquals(0, obj.sumRootToLeaf2(BinaryTree.integers2BinaryTree(0)));

assertEquals(1, obj.sumRootToLeaf2(BinaryTree.integers2BinaryTree(1)));

assertEquals(3, obj.sumRootToLeaf2(BinaryTree.integers2BinaryTree(1, 1)));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值