题目
题目链接:
https://www.nowcoder.com/practice/f8ac976b49bd450887b9281f315186c7
核心
中序遍历
参考答案Java
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
public int minDifference (TreeNode root) {
//中序遍历
Stack<TreeNode> s = new Stack<>();
TreeNode prev = null;
int ans = -1;
while (!s.isEmpty() || root != null) {
while (root != null) {
s.add(root);
root = root.left;
}
root = s.pop();
if (prev != null) {
if (ans == -1) {
ans = Math.abs(root.val - prev.val);
} else
ans = Math.min(ans, Math.abs(root.val - prev.val));
}
prev = root;
root = root.right;
}
return ans;
}
}
参考答案Go
package main
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
func minDifference(root *TreeNode) int {
//中序遍历,Go中用切片模拟栈
stk := []*TreeNode{}
var prev *TreeNode = nil
ans := -1
for len(stk) > 0 || root != nil {
for root != nil {
stk = append(stk, root)
root = root.Left
}
size := len(stk)
root = stk[size-1]
if prev != nil {
if ans == -1 {
ans = root.Val - prev.Val
} else {
diff := root.Val - prev.Val
if ans > diff {
ans = diff
}
}
}
prev = root
stknew := stk[:size-1]
stk = stknew
root = root.Right
}
return ans
}
参考答案PHP
<?php
/*class TreeNode{
var $val;
var $left = NULL;
var $right = NULL;
function __construct($val){
$this->val = $val;
}
}*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
function minDifference( $root )
{
//中序遍历,栈。PHP用数组模拟
$stk = array();
$prev = null;
$ans = -1;
$idx = 0;
while (count($stk) > 0 || $root != null) {
while ($root != null) {
array_push($stk,$root);
$root = $root->left;
}
$root = array_pop($stk);
if ($prev != null) {
$diff = $root->val - $prev->val;
if ($ans == -1) {
$ans = $diff;
} else {
if ($ans > $diff) {
$ans = $diff;
}
}
}
$prev = $root;
$root = $root->right;
}
return $ans;
}