在Java中查找二进制树中的最大元素
时间:2020-02-23 14:34:11 来源:igfitidea点击:
在本教程中,我们将看到关于在Java中的二叉树中找到最大元素的程序。
它可以有两个解决方案。
- 递归
- 迭代
递归解决方案:
算法 :
在二进制树中获取最大元素的步骤:
- 在左子树中查找最大元素
- 在右子树中查找最大元素
- 将上述子树的最大值与当前节点进行比较
- 我们将找到具有上述步骤的最大元素
递归的代码将是:
//Recursive Solution /* To get max node in a binary tree*/ //Recursive Solution /* To get max node in a binary tree*/ public static int getMaximumRec(TreeNode root) { int max=Integer.MIN_VALUE; int value=0; int left,right; if(root != null) { value=root.data; left=getMaximumRec(root.left); right=getMaximumRec(root.right); if(left>right) { max=left; } else { max=right; } if(max < value) { max=value; } } return max; }
迭代解决方案:
迭代解决方案将类似于级别遍历遍历。
当我们从队列中弹出元素时,我们将检查最多。
迭代的代码将是:
//Iterative Solution /* To get max node in a binary tree*/ public static int getMaximumItr(TreeNode startNode) { Queue<TreeNode> queue=new LinkedList<>(); queue.add(startNode); int max=Integer.MIN_VALUE; while(!queue.isEmpty()) { TreeNode tempNode=queue.poll(); if(max < tempNode.data) max=tempNode.data; if(tempNode.left!=null) queue.add(tempNode.left); if(tempNode.right!=null) queue.add(tempNode.right); } return max; }
允许创建Java程序以在二进制树中获取最大元素:
让我们说,你的二叉树是这样的:
package org.igi.theitroad.binarytree; import java.util.LinkedList; import java.util.Queue; public class BinaryTreeGetMaxElement { /* * @Author : igi Mandliya */ public static class TreeNode { int data; TreeNode left; TreeNode right; TreeNode(int data) { this.data=data; } } //Recursive Solution /* To get max node in a binary tree*/ public static int getMaximumRec(TreeNode root) { int max=Integer.MIN_VALUE; int value=0; int left,right; if(root != null) { value=root.data; left=getMaximumRec(root.left); right=getMaximumRec(root.right); if(left>right) { max=left; } else { max=right; } if(max < value) { max=value; } } return max; } //Iterative Solution /* To get max node in a binary tree*/ public static int getMaximumItr(TreeNode startNode) { Queue<TreeNode> queue=new LinkedList<>(); queue.add(startNode); int max=Integer.MIN_VALUE; while(!queue.isEmpty()) { TreeNode tempNode=queue.poll(); if(max < tempNode.data) max=tempNode.data; if(tempNode.left!=null) queue.add(tempNode.left); if(tempNode.right!=null) queue.add(tempNode.right); } return max; } public static void main(String[] args) { //Creating a binary tree TreeNode rootNode=createBinaryTree(); System.out.println("Max node using recursion :"+getMaximumRec(rootNode)); System.out.println("Max node using iteration :"+getMaximumItr(rootNode)); } public static TreeNode createBinaryTree() { TreeNode rootNode =new TreeNode(40); TreeNode node20=new TreeNode(20); TreeNode node10=new TreeNode(10); TreeNode node30=new TreeNode(30); TreeNode node60=new TreeNode(60); TreeNode node50=new TreeNode(50); TreeNode node70=new TreeNode(70); rootNode.left=node20; rootNode.right=node60; node20.left=node10; node20.right=node30; node60.left=node50; node60.right=node70; return rootNode; } }
运行上面的程序,我们将获取以下输出:
Max node using recursion :70 Max node using iteration :70