二叉树的高度
int BinaryTreeHeight(ListNode * node)
{
if(node == NULL)
{
return 0;
}
LeftHeight = BinaryTreeHeight(node->left);
RightHeight = BinaryTreeHeight(node->right);
return LeftHeight>RightHeight?(LeftHeight+1):(RightHeight+1);
}
二叉树中和为某一值的路径
void FindAllPath(ListNode * head, int num)
{
if(head == NULL)
{
return;
}
vector<ListNode *> v;
int sum = 0;
FindPath(head, v, sum, num);
}
void FindPath(ListNode * head, vector<int> v, int sum, int num)
{
sum += head->data;
v.push_back(head);
bool isLeft = head->left == NULL && head->right ==NULL;
if(isLeft && sum == num)
{
vector<int> ::iterator iter =v.begin();
for(:iter != v.end();iter++)
{
print *tier;
}
}
if(head->left != NULL)
{
FindPath(head->left, v, sum, num);
}
if(head->right != NULL)
{
FindPath(head->right, v, sum, num);
}
v.pop_back();
}
二叉树的子数
bool isSubTree(ListNode * head1, ListNode * head2)
{
bool result = false;
if(head1 != NULL && head2 != NULL)
{
if(head1->data == head2->data)
{
result = DoesTree1HaveTree2(head1,head2);
}
if(!result)
{
result = isSubTree(head1->left, head2);
}
if(!result)
{
result = isSubTree(head1->right, head2);
}
}
return result;
}
bool DoesTree1HaveTree2(ListNode *head1, ListNode *head2)
{
if(head2 == NULL)
{
return true;
}
if(head1 ->data != head2->data)
{
return false;
}
bool left_result = DoesTree1HaveTree2(head1->left, head2->left);
bool right_result = DoesTree1HaveTree2(head1->right, head2->right);
}
if(left_result && right_result)
{
return true;
}
else
{
return false;
}
}