94. Binary Tree Inorder Traversal
Leetcode
題目
Input: root = [1,null,2,3]
Output: [1,3,2]Input: root = []
Output: []Input: root = [1]
Output: [1]解答
參考資料
Last updated
Input: root = [1,null,2,3]
Output: [1,3,2]Input: root = []
Output: []Input: root = [1]
Output: [1]Last updated
var inorderTraversal = function(root) {
if (root === null) return [];
const result = [];
const inorder = (node) => {
if(node) {
inorder(node.left);
result.push(node.val);
inorder(node.right);
}
}
inorder(root);
return result;
};var inorderTraversal = function(root) {
if (root === null) return [];
const result = [];
const stack = [];
let curr = root;
while (curr != null || stack.length) {
// 一直往左邊找直到找到左子樹為 null
while(curr != null) {
stack.push(curr);
curr = curr.left;
}
curr = stack.pop();
result.push(curr.val);
curr = curr.right;
}
return result;
};var inorderTraversal = function(root) {
if (root === null) return [];
const result = [];
let curr = root;
let prev;
while (curr != null) {
if(curr.left === null) {
result.push(curr.val);
curr = curr.right;
} else {
prev = curr.left;
// 找出左子樹最右邊的節點
while(prev.right !== null) {
prev = prev.right;
}
// 將 curr 接在左子樹最右邊節點的右邊
prev.right = curr;
const temp = curr;
// 樹根改為左子樹
curr = curr.left;
// curr 在接完後,原本的左子樹要清空
temp.left = null;
}
}
return result;
};