一棵二叉樹原本是搜尋二叉樹,但是其中有兩個節點調換了位置,使得這棵二叉樹不再是搜尋二叉樹,請找到這兩個錯誤節點並返回他們的值。保證二叉樹中結點的值各不相同。
給定一棵樹的根結點,請返回兩個調換了位置的值,其中小的值在前。
只有兩種情況,調換的兩個數相鄰,調換的兩個數不相鄰
如果兩個數相鄰,只有一次順序反過來,要是不相鄰有兩次順序反過來。最多兩次,使用非遞迴方式的中序遍歷即可。
/*
struct treenode
};*/
class finderrornode ;
treenode* cur=root;
stack
sta;
int min=int_min;
vector
res;
vector
retu;
while(!sta.empty()||cur)
treenode* temp=sta.top();
if(temp->valval);
}min=temp->val;
sta.pop();
cur=temp->right;
}if(res.size()==2)
else
return retu;
}};
尋找單鏈表的中間結點
如何尋找單鏈表的中間結點?這裡介紹兩種方法。該方法的思路為 1 先求解單鏈表的長度 length 2 然後遍歷 length 2 的距離即可查詢到單鏈表的中間結點。具體實現 public node findmidele node head return tmp 該方法的缺點 需要遍歷兩次鍊錶,即第一...
尋找錯誤標註資料策略
使用訓練好的模型,得到 結果和標註結果比對,不一樣的可能為noise 的資料 缺點 需要有訓好的模型,模型不能過擬合 度量 所有訓練epoch 的標註位置的值與其他位置的最大值的差值的平均。標註位置的值與其他位置的最大值的差值的平均 越大說明標註越正確,越小或者為負數說明不正確。所以通過選擇乙個閾值...
快速尋找單鏈表中間元素結點
忘記什麼時候做的筆試題了。記憶力差沒辦法。一看到這倒題目,下意識的想到的解決方案便是首先迴圈遍歷鍊錶獲得鍊錶長度len,然後再次迴圈遍歷鍊錶查詢len 2處的中間節點。在這種情況下,其時間複雜度由兩次迴圈決定 o l l 2 o 3l 2 儘管這種思路也能解決問題,但也許存在更好的方法。上次我們談到...