字節面試:實現函數接受任意二叉樹,求二叉樹所有根到葉子路徑組成的數字之和

題目:
實現函數接受任意二叉樹,求二叉樹所有根到葉子路徑組成的數字之和。
解決辦法:使用遞歸方法層層遍歷相加

// 		1
// 	 2	  3
// 4  5  6  7
//結果:(1+2)+(1+3)+(2+4)+(2+5)+(3+6)+(3+7)	 // 39
// 實現函數接受任意二叉樹,求二叉樹所有根到葉子路徑組成的數字之和。
class TreeNode {
  value: number
  left?: TreeNode
  right?: TreeNode
}

function getPathSum(root) {
  // your code
}

// 例子,一層二叉樹如下定義,路徑包括 1 -> 2, 1 -> 3
const node = new TreeNode();
node.value = 1;
node.left = new TreeNode();
node.left.value = 2;
node.right = new TreeNode();
node.right.value = 3;

getPathSum(node) // return 7 =(1+2)+(1+3)

解答:
class TreeNode {}
const node = new TreeNode();
node.value = 1;
node.left = new TreeNode();
node.left.value = 2;
node.right = new TreeNode();
node.right.value = 3;
// 下面數據便於測試使用 結果:39
node.left.left = new TreeNode();
node.left.left.value = 4
node.left.right = new TreeNode();
node.left.right.value = 5
node.right.left = new TreeNode();
node.right.left.value = 6
node.right.right = new TreeNode();
node.right.right.value = 7


function getPathSum(node) {
	let num = 0;

	function addNum(node) {
		if(node.left) {
			num += (node.value + node.left.value)
			if(node.left.left) {
				addNum(node.left)
			} else if(node.left.right) {
				addNum(node.left)
			}
		}
		if(node.right) {
			num += (node.value + node.right.value)
			if(node.right.left) {
				addNum(node.right)
			} else if(node.right.right) {
				addNum(node.right)
			}
		}
	}

	addNum(node)
	console.log(num)	// 39
}
getPathSum(node)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章