查找二叉树中最大元素的Java程序

1 简介

在此程序中,我们将找出给定二叉树中最大的节点。我们首先定义将保存根数据的变量max。然后,我们遍历左侧的子树以找到最大的节点。将其与max进行比较,并将最大值2存储在变量max中。然后,我们遍历右边的子树以找到最大的节点,并将其与max进行比较。最后,max将具有最大的节点。

上图表示一棵二叉树。最初,max将保持15。通过左子树递归。

1. max = 15, leftMax = 20 => (20 > 15) then max = 20  
2. max = 20, leftMax = 74 => (74 > 20) then max = 74   

通过右子树递归。

1. max = 74, rightMax = 35 => (74 > 35) then max = 74  

在35的左子树中递归

1. max = 74, leftMax = 55 => (74 > 55) then max = 74   

递归到右子树35

1. max = 74, rightMax = 6 => (74 > 6) then max = 74 

因此,以上二叉树中的最大节点为74。

2 算法思路

  • 定义类Node,它具有三个属性,分别是:data,left和right。在此,左代表节点的左子节点,右代表节点的右子节点。
  • 为节点的数据部分分配适当的值,并将left和right分配为null。
  • 定义另一个具有属性根的类。
    • 根表示初始化为null的树的根节点。
    • maximumElement()将找出二叉树中的最大节点:
    • 它检查根是否为空,这意味着树为空。
    • 如果树不为空,则定义一个变量max,该变量将存储temp的数据。
    • 通过递归调用largeElement()找出左侧子树中的最大节点。将该值存储在leftMax中。将max的值与leftMax进行比较,并将最大值2存储为max。
    • 通过递归调用largeElement()找出右侧子树中的最大节点。将该值存储在rightMax中。将max的值与rightMax进行比较,并将最大值2存储为max。
    • 最后,max将保留二叉树中最大的节点。

3 程序实现

/**
 * 一点教程网: http://www.yiidian.com
 */
public class LargestNode {  
    //Represent the node of binary tree  
    public static class Node{  
        int data;  
        Node left;  
        Node right;  
  
        public Node(int data){  
            //Assign data to the new node, set left and right children to null  
            this.data = data;  
            this.left = null;  
            this.right = null;  
        }  
     }  
  
      //Represent the root of binary tree  
      public Node root;  
  
      public LargestNode(){  
        root = null;  
      }  
  
      //largestElement() will find out the largest node in the binary tree  
      public int largestElement(Node temp){  
          //Check whether tree is empty  
           if(root == null) {  
               System.out.println("Tree is empty");  
               return 0;  
            }  
           else{  
               int leftMax, rightMax;  
               //Max will store temp's data  
               int max = temp.data;  
  
               //It will find largest element in left subtree  
               if(temp.left != null){  
                   leftMax = largestElement(temp.left);  
                   //Compare max with leftMax and store greater value into max  
                   max = Math.max(max, leftMax);  
                }  
  
                //It will find largest element in right subtree  
                if(temp.right != null){  
                    rightMax = largestElement(temp.right);  
                    //Compare max with rightMax and store greater value into max  
                    max = Math.max(max, rightMax);  
                }  
                return max;  
           }  
      }  
  
      public static void main(String[] args) {  
  
        LargestNode bt = new LargestNode();  
        //Add nodes to the binary tree  
        bt.root = new Node(15);  
        bt.root.left = new Node(20);  
        bt.root.right = new Node(35);  
        bt.root.left.left = new Node(74);  
        bt.root.right.left = new Node(55);  
        bt.root.right.right = new Node(6);  
  
        //Display largest node in the binary tree  
        System.out.println("Largest element in the binary tree: " + bt.largestElement(bt.root));  
      }  
}  

输出结果为:

Largest element in the binary tree: 74

 

热门文章

优秀文章