1、题目描述:
2、思路:
后序遍历:遍历左子树,右子树,根节点
定义一个辅助函数,是的每次传入的list为同一个
3、递归算法实现:
(1) Node节点类:
public class Node {
int val;
Node left;
Node right;
Node(int val){
this.val = val;
}
}
(2)二叉树类Solution:
class Solution {
public Node root;
public void setRoot(Node root) {
this.root = root;
}
public List<Integer> postorderTraversal(Node root) {
List<Integer> list = new ArrayList<>();
if(root==null){
return list;
}
postorderTraversal(root,list);
return list;
}
public void postorderTraversal(Node root,List<Integer> list){
if(root.left!=null){
postorderTraversal(root.left,list);
}
if(root.right!=null){
postorderTraversal(root.right,list);
}
list.add(root.val);
}
}
(3)测试类Main:
public class Main {
public static void main(String[] args) {
Node node = new Node(3);
Node node1 = new Node(9);
Node node2 = new Node(20);
Node node3 = new Node(15);
Node node4 = new Node(7);
Solution binaryTree = new Solution();
binaryTree.setRoot(node);
node.left = node1;
node.right = node2;
node2.left = node3;
node2.right = node4;
List<Integer> integers = binaryTree.postorderTraversal(node);
System.out.println(integers);
}
}
[9, 15, 7, 20, 3]
4、leetCode解答:
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
if(root==null){
return list;
}
postorderTraversal(root,list);
return list;
}
public void postorderTraversal(TreeNode root,List<Integer> list){
if(root.left!=null){
postorderTraversal(root.left,list);
}
if(root.right!=null){
postorderTraversal(root.right,list);
}
list.add(root.val);
}
}