首先用遞迴實現
function
mirrior
(root)if(
!root)
return
true
;return
help
(root.left, root.right)
;}
接著用迴圈實現
function
mirrior
(root)
return
true
;}
這道題有一點很坑的是最長路徑不一定經過根節點。
function
longr
=(root)
=>
lethelp
=(root)
=>if(
!root)
return
0return
help
(root)
}
這是優化之後的
function
longr
=(root)
=>if(
!root)
return
0help
(root)
return max
}
首先使用遞迴
function
allpath
(root)
path.
pop()}
help
(root)
return res
}
接著使用迴圈,後序遍歷
function
allpath
(root)
let node = stack.
slice(-
1)[0
]if(!node.right &&
!node.left)
if(node.right&&
!dic.
has(node.right)
)else
}return res
}
function
maxpathsum
(root)
let max = number.
min_safe_integer
help
(root)
return max
}
首先是中序遍歷的方法
function
isvalid
(root)
return
help
(root)
}
限定上下界進行dfs的方法,分為遞迴和迴圈
function
isbst
(root)
return
help
(root, number.
max_safe_integer
, number.
min_safe_number
)}
function
isbst
(root)
if(node.right)
}return
true
}
function
changetobst
(nums)
return
help(0
, nums.length-1)
}
遞迴
function
changetolist
(root)
p.right = root.right
root.right = root.left
root.left =
null
}}
迴圈
function
changetolist
(root)
let node = stack.
slice(-
1)[0
]if(node.right &&
!dic.
has(node.right)
)else
pp.right = node.right
node.right = node.left
node.left =
null
} stack.
pop()}
}}
function
allbst
(n)}
}return res
}return
help(1
,n)}
二叉樹 還原二叉樹 二叉搜尋樹
先序遍歷的特點 先遍歷根結點,再遍歷左子樹,最後再遍歷右子樹 中序遍歷的特點 先遍歷左子樹,再遍歷根結點,最後再遍歷右子樹 後序遍歷的特點 先遍歷左子樹,再遍歷右子樹,最後再遍歷根結點 舉例 先序遍歷 a b d f g h i e c 中序遍歷 f d h g i b e a c 如上,根據先序遍...
樹 二叉樹 二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...
排序二叉樹or搜尋二叉樹or查詢二叉樹
排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...