package com.study;
/*
* 根據二叉樹的前序遍歷和中序遍歷結果重建二叉樹
* 並輸出其頭節點。假設前序遍歷和中序遍歷結果中沒有重複數字
* 前序遍歷序列:
* 中序遍歷序列:
* **/
class treenode
}public class suanfa4 ;
private static int arr2 = ;
public static treenode rebuildbinarytree()
public static treenode constructbtree(treenode node, int pre, int pre_start, int pre_end,
int inorder, int inorder_start, int inorder_end)
if( right_length > 0)
return root; }
public static int findpos(int num, int arr)
return -1; }
/*後序遍歷*/
public static void lastorder(treenode head) }
public static void main(string args)
}
費了好半天勁才弄出來,有兩點感想:
1.如上圖**中被注釋掉的列印語句一樣,有時除錯程式中的邏輯錯誤,尤其是令人頭大的遞迴,新增列印語句比單步除錯更為簡單直白,不然,單步跟蹤,調著調著就被繞進去了(智商不高,見諒!)
2.雖然這次是參考著劍指offer上的答案弄出來的,但是還是頗有感觸。一定要敢想,堅信乙個道理:一切反動派都是紙老虎。尤其是遞迴,要注意函式的引數。有時候最簡單的思路,往往容易被忽視。繼續努力!
package com.study;
/** 根據二叉樹的前序遍歷和中序遍歷結果重建二叉樹
* 並輸出其頭節點。假設前序遍歷和中序遍歷結果中沒有重複數字
* 前序遍歷序列:
* 中序遍歷序列:
* **/
class treenode
} public class suanfa4 ;
private static int arr2 = ;
public static treenode rebuildbinarytree()
public static treenode constructbtree(int pre, int pre_start, int pre_end,
int inorder, int inorder_start, int inorder_end)
if( right_length > 0)
return root;
} public static int findpos(int num, int arr)
return -1;
} /*後序遍歷*/
public static void lastorder(treenode head)
} public static void main(string args)
}
根據前序遍歷和中序遍歷重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。class treenode public class s2 public treenode reconstruct int pre...
重建二叉樹 根據前序遍歷和中序遍歷構建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 1.前序遍歷的第乙個節點一定是根結點。前序遍歷的乙個節點要麼是相鄰前乙個節點的左子樹 右子樹或者更靠近前面節點的右子樹。如何確...
根據前序和中序遍歷重建二叉樹
include stdafx.h include include include using namespace std 重建二叉樹 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹.假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字.例如 輸入前序遍歷序列和中序遍歷序列,則重建出圖...