class tree;
private static listnodelist = null;
private static class node
}public void createbintree()
// 對前lastparentindex-1個父節點按照父節點與孩子節點的數字關係建立二叉樹
for (int parentindex = 0; parentindex < array.length / 2 - 1; parentindex++)
// 最後乙個父節點:因為最後乙個父節點可能沒有右孩子,所以單獨拿出來處理
int lastparentindex = array.length / 2 - 1;
// 左孩子
nodelist.get(lastparentindex).leftchild = nodelist
.get(lastparentindex * 2 + 1);
// 右孩子,如果陣列的長度為奇數才建立右孩子
if (array.length % 2 == 1)
}/**
* 首先找到每個節點的父節點,利用map儲存(map底層用紅黑樹實現,所以查詢效率也高),
* 這種方法克服了二叉樹只能找到自己的兒子的缺點。
* 然後用dfs搜尋的方法尋找目標節點。
*/static mappar;
static void parent(node root)
if (root.rightchild != null)
}static void dfs(node root, int k, listvisit, vectorres)
if(root.leftchild != null)
dfs(root.leftchild,k-1,visit,res);
if(root.rightchild != null)
dfs(root.rightchild,k-1,visit,res);
node p = par.get(root);
if(p != null)
dfs(p,k-1,visit,res);
}public static vectordistancek(node root, node target, int k)
public static void main(string args)
}
二叉樹中所有距離為k的結點
一 問題解釋 給定乙個二叉樹 具有根結點root 乙個目標結點target,和乙個整數值k,返回到目標結點target距離為k的所有結點的值的列表。答案可以以任何順序返回。輸入 root 3,5,1,6,2,0,8,null,null,7,4 target 5,k 2 輸出 7,4,1 所求結點為與...
863 二叉樹中所有距離為 K 的結點
給定乙個二叉樹 具有根結點 root 乙個目標結點 target 和乙個整數值 k 返回到目標結點 target 距離為 k 的所有結點的值的列表。答案可以以任何順序返回。示例 1 輸入 root 3,5,1,6,2,0,8,null,null,7,4 target 5,k 2 輸出 7,4,1 解...
二叉樹中所有距離為K的節點(DFS BFS)
為找到與節點距離為k的節點,需解決節點回溯到其父節點的問題,因此需知道每個節點的父節點,使用雜湊表進行儲存,通過dfs建立此雜湊表 將target節點push到佇列中,進行三個方向的bfs 左孩子 右孩子 父節點 為防止重複訪問節點,需使用set儲存已訪問過的節點 definition for a ...