Description
Given the linked representation of binary trees
typedef int T;
struct BinaryNode{
T data; //store data
BinaryNode *left, *right;
BinaryNode(T d, BinaryNode *l=NULL, BinaryNode* r=NULL):data(d), left(l), right(r) {};
};
Implement the following function:
int externalPL(const BinaryNode* root)
// returns the external path lenght of the binary tree root
{
// insert here
}
n外部路径长度
从根到达各个叶节点的路径长度之和
n内部路径长度
从根到达各个分支节点的路径长度之和
用层次遍历,一层一层的找叶节点,方法与1003类似,添加标志结点来判断是那一层。
#include <iostream>
#include <queue>
using namespace std;
typedef int T;
struct BinaryNode{
T data; //store data
BinaryNode *left, *right;
BinaryNode(T d, BinaryNode *l=NULL, BinaryNode* r=NULL):data(d), left(l), right(r) {};
};
int externalPL(const BinaryNode* root)
// returns the external path lenght of the binary tree root
{
if (root == NULL) {
return 0;
}
int count = 0;
int sum = 0;
queue<const BinaryNode*> s;
s.push(root);
const BinaryNode* b = new BinaryNode(-1, NULL, NULL);
s.push(b);
while (!s.empty()) {
const BinaryNode* a = s.front();
s.pop();
if (s.size() == 0) break;
//每一层的长度
if (a == b) {
count++;
s.push(b);
}
else {
if (a->left != NULL) {
s.push(a->left);
}
if (a->right != NULL) {
s.push(a->right);
}
//判断是否为叶节点
if (a->left == NULL && a->right == NULL) {
sum += count;
}
}
}
return sum;
}