"106-construct binary tree from Inorder and postorder traversal (construct two-fork trees via middle order and post-sequence traversal)"
"leetcode-Interview algorithm classic-java Implementation" "All topics Directory Index"
Original Question
Given Inorder and Postorder traversal of a tree, construct the binary tree.
Note:
Assume that duplicates does not exist in the tree.
Main Topic
A binary tree is constructed, given a sequence traversal and sequential traversal sequences.
Note:
There are no duplicate elements in the tree
Thinking of solving problems
The last element of the post-order traversal is the root node (value R) of the tree, and the position of r in the sequential traversal sequence is idx,idx the sequence traversal sequences into the left and right two sub-trees, corresponding to which the sequence of sequential traversal can be divided into two sub-trees and recursively solved.
Code Implementation
publicclass TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}
Algorithm implementation class
Public class solution { PublicTreeNodeBuildtree(int[] inorder,int[] postorder) {//parameter checking if(Inorder = =NULL|| Postorder = =NULL|| Inorder.length = =0|| Inorder.length! = postorder.length) {return NULL; }//Build a binary tree returnSolve (Inorder,0, Inorder.length-1, Postorder,0, Postorder.length-1); }/** * Build binary Tree * * @param inorder Results of sequential traversal * @param x start position of the ordinal traversal * @par the end position of the sequence traversal in am y * @param postorder Results of post-order traversal * @param The start position of the post-ordering traversal * @p Aram J post-traversal end position * @return two fork tree * / PublicTreeNodeSolve(int[] inorder,intXintYint[] Postorder,intIintj) {if(x >=0&& x <= y && i >=0&& I <= j) {//There is only one element, (also i=j at this time) if(x = = y) {return NewTreeNode (Postorder[j]); }//More than one element, at this time there are also i<j Else if(x < y) {//Create root nodeTreeNode root =NewTreeNode (Postorder[j]);//Find root node subscript in middle sequence traversal intIDX = x; while(Idx < y && inorder[idx]! = Postorder[j]) {idx++; }//Left dial hand tree non-empty, build left sub-tree intLeftlength = Idx-x;if(Leftlength >0) {//I, I + leftLength-1, start of the left subtree of the pre-sequence traversal, end positionRoot.left = Solve (inorder, X, IDX-1, Postorder, I, i + leftlength-1); }//Right subtree non-empty, build right sub-tree intRightlength = Y-idx;if(Rightlength >0) {//i + Leftlength, j-1, start of the right subtree of the pre-sequence traversal, end positionRoot.right = Solve (inorder, IDX +1, Y, Postorder, i + leftlength, J-1); }returnRoot }Else{return NULL; } }return NULL; }}
Evaluation Results
Click on the picture, the mouse does not release, drag a position, release after the new window to view the full picture.
Special Instructions
Welcome reprint, Reprint please indicate the source "http://blog.csdn.net/derrantcm/article/details/47371993"
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
"Leetcode-Interview algorithm classic-java implementation" "106-construct binary tree from Inorder and postorder traversal (construction of two Fork Trees II)"