牛客經典必刷演算法題-LC6-二叉樹的後序遍歷
阿新 • • 發佈:2020-12-14
牛客經典必刷演算法題-LC6-二叉樹的後序遍歷
題目描述
用遞迴的方法對給定的二叉樹進行後序遍歷。
示例
輸入
{1,#,2,3}
返回值
[3,2,1]
思路
二叉樹的遍歷
首先了解一下什麼是二叉樹的遍歷?
- 二叉樹的遍歷:是指從根結點出發,按照某種次序依次訪問二叉樹中所有的結點,使得每個結點被訪問依次且僅被訪問一次
- 二叉樹的遍歷有四種,分別為:先序遍歷、中序遍歷、後序遍歷、層序遍歷
- 二叉樹遍歷順序如下:
實際上,先中後序遍歷都是對於根節點遍歷次序的描述,左右兩個節點訪問次序始終為先左後右
遍歷框架
知道了什麼是二叉樹的遍歷,其實很容易有以下遍歷框架:
先序遍歷
void recur(TreeNode root){
// 對根節點進行一些操作
func(root); // func為主要操作
// 遞迴訪問左節點
recur(root.left);
// 遞迴訪問右節點
recur(root.right);
}
中序遍歷
void recur(TreeNode root){
// 遞迴訪問左節點
recur(root.left);
// 對根節點進行一些操作
func(root); // func為主要操作
// 遞迴訪問右節點
recur(root.right);
}
後序遍歷
void recur(TreeNode root){
// 遞迴訪問左節點
recur(root.left);
// 遞迴訪問右節點
recur(root.right);
// 對根節點進行一些操作
func(root); // func為主要操作
}
有了以上框架,再看二叉樹的遍歷問題就比較簡單了,套入框架就可以解答本題。
解答
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode類
* @return int整型ArrayList
*/
private ArrayList<Integer> res;
public ArrayList<Integer> postorderTraversal (TreeNode root) {
res = new ArrayList<>();
recur(root);
return res;
}
private void recur(TreeNode node){
if(node == null) return;
// 遍歷左節點
recur(node.left);
// 遍歷右節點
recur(node.right);
// 加入根節點
res.add(node.val);
}
}