節點:
class
node
<
t>
public
node
<
t>
left
public
node
<
t>
right
public
node(t value, node
<
t>
left, node
<
t>
right)
public
node(t value) :
this
(value,
null
, null) }
二叉樹:
前中後深度優先遍歷非遞迴,上到下(下到上)寬度優先遍歷非遞迴,輸出某層,獲取深度
class
binarytree
<
t>
public
void
clear()
public
void
preorder()
}public
void
midorder()
current
=stack.pop();
console.write(current.value +"
");}}
public
void
afterorder()
while
(tovisit.count !=0
)else
else
console.writeline(node.value +"
");}}
}public
void
updownorder()
}public
void
downuporder()
intc
=stack.count;
for(
inti =0
; i
<
c; i++)
}public
void
printnodeatlevel(
intlevel)
private
void
printnodeatlevel(node
<
t>
node,
intlevel)
printnodeatlevel(node.left, level -1
);printnodeatlevel(node.right, level -1
);}public
intgetdepth()
private
intgetdepth(node
<
t>
node)}
搜尋二叉樹:
搜尋、包含、增加刪除、獲取父節點
class
binarysearchtree
<
t>
: binarytree
<
t>
return
current;
}public
bool
contains(t data)
return
false;}
public
node
<
t>
getparent(node
<
t>
node)
else
if(result
<0)
}return
parent;
}public
void
add(t data)
else
if(result
<0)
}if(parent
==null
)base
.root =n;
else
}public
bool
remove(t data)
else
if(result
<0)
if(current
==null
)return
false
;else
result
=comparer.compare(current.value, data);}if
(current.right
==null)}
else
if(current.right.left
==null)}
else
lmparent.left
=leftmost.right;
leftmost.left
=current.left;
leftmost.right
=current.right;
if(parent
==null
)base
.root
=leftmost;
else
}current.left
=current.right
=null
;current
=null
;return
true;}
}
二叉樹相關演算法 二
leetcode 437.path sum iii 第乙個想法就是遍歷二叉樹,找出每個節點的可能性。這個思路時間複雜度為o n 2 private int num public intpathsum treenode root,int sum private void recur treenode ...
二叉樹的相關演算法
二叉樹 二叉查詢樹 是這樣一類的樹,父節點的左邊孩子的key都小於它,右邊孩子的key都大於它。二叉樹在查詢和儲存中通常能保持logn的查詢 插入 刪除,以及前驅 後繼,最大值,最小值複雜度,並且不占用額外的空間。include includeusing namespace std class tr...
二叉樹相關演算法(Java)
二叉樹的非遞迴遍歷 其他相關演算法 輸入一顆二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的結點 含根,葉子結點 形成一條路徑,最長路徑的長度為樹的深度 public int treedepth treenode root int left treedepth root.left int r...