1. 程式人生 > 其它 >牛客經典必刷演算法題-LC6-二叉樹的後序遍歷

牛客經典必刷演算法題-LC6-二叉樹的後序遍歷

技術標籤:演算法二叉樹

牛客經典必刷演算法題-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); } }