生成二叉樹

2021-07-25 21:54:15 字數 1941 閱讀 9326

問題描述

由中序遍歷和後續遍歷生成二叉樹

解題思路

方法一:時間o(n2) ,空間 o(1)

public treenode buildtree(int inorder, int postorder) 

public treenode buildnode(int inorder, int ib, int ie, int postorder, int pb, int pe) else

if(ib > ie)

return

null;

treenode root = new treenode(postorder[pe]);

int index = findindex(inorder,ib,ie,postorder[pe]);

int llength = index - ib;

int leftbeginin = ib;

int leftendin = index - 1;

int leftbeginpost = pb;

int leftendpost = pb + llength - 1;

root.left = buildnode(inorder,leftbeginin,leftendin,postorder,leftbeginpost,leftendpost);

int rightbeginin = index + 1;

int rightendin = ie;

int rightbeginpost = pb + llength;

int rightendpost = pe - 1;

root.right = buildnode(inorder,rightbeginin,rightendin,postorder,rightbeginpost,rightendpost);

return root;

}public

intfindindex(int nums,int ib,int ie,int target)

return -1;

}

方法二:使用雜湊表。時間複雜度o(n),空間o(n)

public treenode buildtreepostin(int inorder, int postorder) 

private treenode buildtreepostin(int inorder, int

is, int ie, int postorder, int ps, int pe,

hashmaphm)

問題描述

由先序遍歷和中續遍歷生成二叉樹

解題思路

方法一:時間o(n) ,空間 o(n)

public treenode buildtree(int preorder, int inorder) 

return buildnode(preorder,0,prelength-1,inorder,0,inlength-1,map);

}public treenode buildnode(int preorder, int pb, int pe, int inorder, int ib, int ie,hashmapmap)

treenode root = new treenode(preorder[pb]);

intindex = map.get(preorder[pb]);

intlength = index - ib;

root.left = buildnode(preorder, pb+1, pb+length, inorder, ib, index-1,map);

root.right = buildnode(preorder, pb+length+1, pe, inorder, index+1, ie,map);

return root;

}

二叉樹的生成

from pdd 給定乙個list,比如 7,8 2,3 2,4 4,5 4,6 3,7 其中integer 0 表示父節點,integer 1 表示子節點 排在前面的為左子節點,排在後面的為有子節點 題目要求 根據這個list生成一棵二叉樹,並按照前序遍歷輸出 根據如上描述,生成的二叉樹應該長這樣...

二叉樹的生成

先序 4 1 3 2 6 5 7 中序 1 2 3 4 5 6 7 後序 2 3 1 5 7 6 4 知道先序和中序求後序 源 include using namespace std const int maxn 50 5 int pre maxn mid maxn 前序 和 中序 struct n...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...