106. 从中序与后序遍历序列构造二叉树
题目描述
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
解题思路
class Solution {
public:
TreeNode* buildTree(vector<int> ino, vector<int> posto) {
if(ino.empty())return NULL;
int l=posto.back();
auto it=find(ino.begin(),ino.end(),l);
int i =distance(ino.begin(),it);
TreeNode*left=buildTree(vector<int>(ino.begin(), it),vector<int>(posto.begin(),posto.begin()+i));
TreeNode*right=buildTree(vector<int>(it+1,ino.end()),vector<int>(posto.begin()+i,posto.end()-1));
return new TreeNode(l, left, right);
}
};
105. 从前序与中序遍历序列构造二叉树
class Solution {
public:
TreeNode* buildTree(vector<int> preorder, vector<int>ino) {
if(ino.empty())return NULL;
int l =preorder.front();
auto it=find(ino.begin(),ino.end(),l);
int i =distance(ino.begin(),it);
TreeNode*left=buildTree(vector<int>(preorder.begin()+1,preorder.begin()+i+1),vector<int>(ino.begin(), it));
TreeNode*right=buildTree(vector<int>(preorder.begin()+i+1,preorder.end()),vector<int>(it+1,ino.end()));
return new TreeNode(l,left,right);
}
};
学习感想
#![allow(unused)] fn main() { // Definition for a binary tree node. #[derive(Debug, PartialEq, Eq)] pub struct TreeNode { pub val: i32, pub left: Option<Rc<RefCell<TreeNode>>>, pub right: Option<Rc<RefCell<TreeNode>>>, } impl TreeNode { #[inline] pub fn new(val: i32) -> Self { TreeNode { val, left: None, right: None } } } use std::rc::Rc; use std::cell::RefCell; struct Solution {} impl Solution { pub fn build_tree(inorder: Vec<i32>, postorder: Vec<i32>) -> Option<Rc<RefCell<TreeNode>>> { Self::build_tree_ref(&inorder, &postorder) } pub fn build_tree_ref(inorder: &[i32], postorder: &[i32]) -> Option<Rc<RefCell<TreeNode>>> { if inorder.len() == 0usize { return None } let n: usize = inorder.len(); let mut num = postorder[n - 1usize]; let pos: usize = inorder.iter().position(|&x| x == num).unwrap(); let mut tn: TreeNode = TreeNode::new(num); tn.left = Self::build_tree_ref(&inorder[..pos], &postorder[..pos]); tn.right = Self::build_tree_ref(&inorder[pos + 1usize .. ], &postorder[pos .. n - 1usize]); Some(Rc::new(RefCell::new(tn))) } } }