根據前序遍歷和中序遍歷重建二叉樹

2022-04-17 13:02:18 字數 1649 閱讀 9769

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 重建二叉樹 題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹.假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字.例如 輸入前序遍歷序列和中序遍歷序列,則重建出圖...