1. 程式人生 > 其它 >輸出二叉樹的右檢視

輸出二叉樹的右檢視

技術標籤:Leetcode

輸出二叉樹的右檢視

題目描述

請根據二叉樹的前序遍歷,中序遍歷恢復二叉樹,並打印出二叉樹的右檢視
在這裡插入圖片描述

程式碼

import java.util.*;
public class Solution {
    /**
     * 程式碼中的類名、方法名、引數名已經指定,請勿修改,直接返回方法規定的值即可
     * 求二叉樹的右檢視
     * @param xianxu int整型一維陣列 先序遍歷
     * @param zhongxu int整型一維陣列 中序遍歷
     * @return int整型一維陣列
     */
    public HashMap<
Integer,Integer>
z_Index = new HashMap(); public ArrayList<Integer> list = new ArrayList<Integer>(); public int[] solve (int[] xianxu, int[] zhongxu) { // write code here if(xianxu == null || zhongxu == null) return null; //記錄中序數值的位置索引 for(int i=0; i<
zhongxu.length; i++){ z_Index.put(zhongxu[i], i); } //生成二叉樹 TreeNode node = buildTree(xianxu, zhongxu, 0, 0, zhongxu.length-1); //深度回溯 dfs(node, 0); int[] res = new int[list.size()]; for(int i=0; i<list.size(); i++){ res[i] =
list.get(i); } return res; } public void dfs(TreeNode tree, int hight){ if(tree == null) return; //只有小於等於樹的高度才加入 if(list.size() <= hight) list.add(tree.val); //從右樹開始 dfs(tree.right, hight+1); dfs(tree.left, hight+1); } //len指當前中序的長度 public TreeNode buildTree(int[] xianxu, int[] zhongxu, int xIndex, int zIndex, int len){ if(zIndex > len) return null; TreeNode node = new TreeNode(xianxu[xIndex]); int mIndex = z_Index.get(xianxu[xIndex]); node.left = buildTree(xianxu, zhongxu, xIndex+1, zIndex, mIndex-1); node.right = buildTree(xianxu, zhongxu, xIndex+mIndex-zIndex+1, mIndex+1, len); return node; } }