問題描述
由中序遍歷和後續遍歷生成二叉樹
解題思路
方法一:時間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的所在子樹...