给出如下一棵二叉树:
1
/ \
-5 2
/ \ / \
0 3 -4 -5
返回值为 3 的节点。
以上是LintCode上给出的样例。
查找二叉树中的最大值必定会涉及到对二叉树的遍历。
二叉树遍历常见有三种方法: 中序遍历:
void traversal(TreeNode * root)
{
if(root)
{
traversal(root->left);
/* 对树根的操作 */
traversal(root->right);
}
}
前序遍历:
void traversal(TreeNode * root)
{
if(root)
{
/* 对树根的操作 */
traversal(root->left);
traversal(root->right);
}
}
后序遍历:
void traversal(TreeNode * root)
{
if(root)
{
traversal(root->left);
traversal(root->right);
/* 对树根的操作 */
}
}
了解了遍历的方法后,找出数值最大节点的办法也就非常明了了。
以下,是我查询数值最大节点的办法:
TreeNode * maxNode(TreeNode * root)
{
static TreeNode *p = NULL;
if(p == NULL)
{
p = root;
}
if(root)
{
maxNode(root->left);
if(p->val < root->val)
{
p = root;
}
maxNode(root->right);
}
return p;
}
};
|