Question:
給出一棵二叉樹,返回其節點值的前序遍歷。
給出一棵二叉樹 {1,#,2,3},
1
\
2
/
3
返回 [1,2,3]
Solution:
二叉樹的遍歷只要記住
1、藉助棧
2、前序遍歷:入棧時訪問
3、中序遍歷:彈出棧時訪問
4、後續遍歷:關鍵點在於,要先訪問完左右子樹後,才能訪問當前節點
那麼就用一個pre節點標記剛訪問過的節點,如果當前節點的右兒子爲空或者右兒子是剛剛訪問過的節點,此時彈出並訪問棧頂元素
public class Q66_binaryTreePreorderTraversal {
public List<Integer> preorderTraversal(TreeNode root) {
// write your code here
List<Integer> result = new ArrayList<Integer>();
if(root == null)
return result;
TreeNode cur = root;
Stack<TreeNode> stack = new Stack<TreeNode>();
while(cur != null || !stack.isEmpty()) {
if(cur != null) {
stack.push(cur);
result.add(cur.val);
cur = cur.left;
} else {
cur = stack.pop();
cur = cur.right;
}
}
return result;
}
@Test
public void test() {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.left.right = new TreeNode(5);
root.left.left = new TreeNode(4);
root.right = new TreeNode(3);
List<Integer> result = preorderTraversal(root);
System.out.println(result.toString());
}
}