這個問題專門與Java有關。
我們需要按前序和后序遍歷一棵樹。問題是逗號。
預購很簡單:只是在訪問第一個節點之前不要附加逗號。
為了有序,逗號不能放在最左下角的節點之前。
否則遍歷將如下所示:
[, <0, 0>, <1, 1>, <2, 2>, <3, 3>, <4, 4>, <5, 5>, <21, 21>, <78, 78>, <88, 88>]
我們特別不允許使用字串替換來洗掉逗號,或者修改遞回函式的引數:
private int inorderTraversal(Node<K, V> node, StringBuilder str, int nodesVisited)
我的理論解決方案如下所示:
if (node != null) {
if (nodesVisited==0)
nodesVisited=1;
if (node.left!=null) {
nodesVisited = inorder(node.left, str, nodesVisited 1);
//move curly brace A here
if (size > 1) {
str.append(", ");
//moveCurlyBrace(A)
}
} //curly brace A
str.append(node.toString());
if (node.right!=null)
nodesVisited=inorder(node.right, str, nodesVisited 1);
}
return nodesVisited;
我知道這是一個不好的方法。不惜一切代價避免自修改代碼。但是,我認為這會很有趣,并且會突出要求的愚蠢性。
不要告訴我正確的方法,因為那是作弊,但是如果可能的話,我將如何進行此操作?
uj5u.com熱心網友回復:
理論上,可以通過使用ByteBuddy來做到這一點,該庫已經存在了很長時間,它允許在運行時操作位元組碼。
也有sun.misc.Unsafe
,但在較新版本的 Java 中,它確實被鎖定了。也就是說,我認為 ByteBuddyUnsafe
無論如何都會在引擎蓋下發揮作用,但它讓人感覺不像是拿著磁針和穩定的手套。
但這樣做并沒有什么實際意義。我沒有任何方便的例子,因為撰寫自修改代碼太挑剔了。更糟糕的是,它使您的代碼不可讀且不切實際。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/521546.html
標籤:爪哇二叉搜索树理论