这道题的考察目的主要是考察二叉树的遍历,遍历整个二叉树获取值最大的节点。遍历二叉树可以使用前序遍历后序遍历和中序遍历,在不使用递归的情况下使用前序遍历最简单,前序遍历的思想很简单,对于每个需要访问的节点只要节点不为空就访问此节点,如果此节点的右子树存在就将此节点压栈,将下一个访问的节点设置为左子树。
根据上述的描述程序的流程图为:
程序为:
TreeNode * maxNode(TreeNode * root) {
// write your code here
stack<TreeNode*> q;
TreeNode *max=NULL;
TreeNode *node=NULL;
max=root;
q.push(root);
while(!q.empty())
{
node=q.top();
q.pop();
while(node)
{
if(max->val<node->val)
{
max=node;
}
if(node->right)
{
q.push(node->right);
}
node=node->left;
}
}
return max;
}