從根節點往下分別查找左子樹和右子樹的最大節點,再比較左子樹,右子樹,根節點的大小得到結果,在得到左子樹和右子樹最大節點的過程相似,因此可以采用遞歸的
- //樹節點結構??
- public?class?TreeNode?{??
- ????TreeNode?left;??
- ????TreeNode?right;??
- ????int?val;??
- ????TreeNode(int?val){??
- ????????this.val?=?val;??
- ????}??
- }??
- public?class?Solution?{??
- ????/**?
- ?????*?@param?root?傳入根節點?
- ?????*?@return?返回最大結果?
- ?????*/??
- ????public?static?TreeNode?maxNode(TreeNode?root){??
- ????????//當再無子節點,返回當前節點??
- ????????if?(root?==?null)?{??
- ????????????return?root;??
- ????????}???
- ??????????
- ????????TreeNode?left?=?maxNode(root.left);//遞歸得到左子樹最大值??
- ????????TreeNode?right?=?maxNode(root.right);//遞歸得到右子樹的最大值??
- ????????return?max(root,max(left,right));//返回左節點,根節點,右節點的最大值??
- ??????????
- ????}??
- ????public?static?TreeNode?max(TreeNode?a,TreeNode?b)?{??
- ????????if?(a?==?null)?{??
- ????????????return?b;??
- ????????}??
- ????????if?(b?==?null)?{??
- ????????????return?a;??
- ????????}??
- ????????if?(a.val?>?b.val)?{??
- ????????????return?a;??
- ????????}??
- ????????return?b;??
- ????}??
- ????public?static?void?main(String[]?args)?{??
- ????????TreeNode?t1?=?new?TreeNode(1);??
- ????????TreeNode?t2?=?new?TreeNode(-5);??
- ????????TreeNode?t3?=?new?TreeNode(3);??
- ????????TreeNode?t4?=?new?TreeNode(1);??
- ????????TreeNode?t5?=?new?TreeNode(2);??
- ????????TreeNode?t6?=?new?TreeNode(-4);??
- ????????TreeNode?t7?=?new?TreeNode(-5);??
- ????????t1.left?=?t2;t1.right?=?t5;??
- ????????t2.left?=?t3;t2.right?=?t4;??
- ????????t5.left?=?t6;t5.right?=?t7;??
- ????????System.out.println(Solution.maxNode(t1).val);??
- ????}??
- }??