您的位置:首页 > 编程语言 > Java开发

【LintCode-632】二叉树的最大节点(Java实现)

2017-11-03 21:55 381 查看


第一次代码:

public TreeNode maxNode(TreeNode root) {
if (root == null) {
return null;
} else if (root.left != null && root.right != null) {
TreeNode leftNode = maxNode(root.left);
TreeNode rightNode = maxNode(root.right);
if (leftNode.val >= rightNode.val && leftNode.val >= root.val) {
return leftNode;
} else if (rightNode.val > leftNode.val && rightNode.val > root.val) {
return rightNode;
} else {
return root;
}
} else if (root.left == null && root.right != null) {
TreeNode rightNode = maxNode(root.right);
if (rightNode.val >= root.val) {
return rightNode;
} else {
return root;
}
} else if (root.right == null && root.left != null) {
TreeNode leftNode = maxNode(root.left);
if (leftNode.val >= root.val) {
return leftNode;
} else {
return root;
}
}
return root;
}


第二次代码记录:

public TreeNode maxNode(TreeNode root) {
if (root == null)
return null;
TreeNode leftMaxNode = root.left != null ? maxNode(root.left) : null;
TreeNode rightMaxNode = root.right != null ? maxNode(root.right) : null;
if (leftMaxNode != null && rightMaxNode != null) {
TreeNode tempNode = leftMaxNode.val > rightMaxNode.val ? leftMaxNode
: rightMaxNode;
return tempNode.val > root.val ? tempNode : root;
} else if (leftMaxNode != null) {
return leftMaxNode.val > root.val ? leftMaxNode : root;

b4e6
} else if (rightMaxNode != null) {
return rightMaxNode.val > root.val ? rightMaxNode : root;
}
return root;
}


个人解题思路-递归算法:

1. 求出左子树的最大节点的val值 //leftMaxNode.val

2. 当前二叉树节点的val值 //root.val

3. 求出右子树的最大节点的val值 //rightMaxNode.val

4. 返回最大val值节点

如果您有更好的解法,欢迎您在留言区补充,感谢!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: