题目:
在二叉树中寻找值最大的节点并返回。
样例:
给出如下一棵二叉树:
1
/ \
-5 2
/ \ / \
0 3 -4 -5
返回值为 3
的节点。
思路:
采用非递归的先根次序遍历二叉树
①从根节点开始,访问左子树,并将当前访问的结点与当前最大值结点作比较,若当前结点值大于当前最大值结点,则用该结点替换最大值结点,然后将访问过的结点存入栈中,直到左子树访问完。
②从堆栈中弹出一个结点,访问该结点的右子树,并将其值与最大值比较,若大于,则替换最大值结点,重复以上步骤。
class Solution {
public:/**
* @param root the root of binary tree
* @return the max node
*/
TreeNode* maxNode(TreeNode* root) {
// Write your code here
int top=-1;
TreeNode* s[100000];
TreeNode* node=root;
while(root!=NULL||top!=-1){
while(root!=NULL){
if(node->val<=root->val){
node=root;
}
s[++top]=root;
root=root->left;
}
if(top!=-1){
root=s[top--];
if(node->val<=root->val){
node=root;
}
root=root->right;
}
}
return node;
}
};
感想:
该题若采用递归的方法则不容易实现,而采用非递归的方法则更容易些。